( Jika Anda menggunakan SQL Server 2012 atau yang lebih baru, silakan lihat jawaban @ wBob untuk pendekatan yang lebih bersih. Pendekatan yang dijabarkan dalam jawaban saya di bawah ini hanya diperlukan jika Anda menggunakan SQL Server 2008 R2 atau lebih lama. )
Anda tidak perlu (atau ingin) pemisah ribuan saat mengkonversi NUMERIC
, terlepas dari apakah itu koma, titik, atau ruang, jadi singkirkan saja dulu. Kemudian konversikan koma menjadi titik / desimal dan Anda selesai:
SELECT CONVERT(NUMERIC(10, 2),
REPLACE(
REPLACE('7.000,45', '.', ''),
',', '.'
)
) AS [Converted];
Pengembalian:
7000.45
Demi kelengkapan, saya harus menyebutkan bahwa saya juga mencoba:
SET LANGUAGE Greek;
Melihat berbagai gaya format untuk CONVERT , tetapi tidak ada yang berlaku di sini.
Fungsi FORMAT , tetapi tipe input harus berupa nilai numerik atau tanggal / waktu / waktu (itu dan itu diperkenalkan di SQL Server 2012, jadi tidak berlaku untuk SQL Server 2008 R2 atau lebih lama).
Dan sepertinya tidak ada yang berhasil. Saya berharap untuk menemukan sesuatu yang lebih elegan daripada dua REPLACE
panggilan, tetapi sejauh ini tidak ada keberuntungan.
Juga, hanya untuk menyebutkan, meskipun bukan solusi T-SQL murni, ini juga dapat dicapai melalui SQLCLR. Dan, ada fungsi pra-selesai yang melakukan ini di perpustakaan SQL # (yang saya tulis) bernama String_TryParseToDecimal . Fungsi ini tersedia dalam versi Gratis, dan berfungsi di setiap versi SQL Server dimulai dengan SQL Server 2005:
SELECT SQL#.String_TryParseToDecimal('7.000,45', 'el-GR');
Pengembalian:
7000.45000000000000000000