( Jeśli używasz programu SQL Server 2012 lub nowszego, zapoznaj się z odpowiedzią @ wBob, aby uzyskać bardziej przejrzyste podejście. Podejście przedstawione w mojej odpowiedzi poniżej jest wymagane tylko w przypadku korzystania z programu SQL Server 2008 R2 lub starszego ).
Nie potrzebujesz (lub nie chcesz) separatora tysięcy podczas konwersji na NUMERIC
, niezależnie od tego, czy jest to przecinek, kropka czy spacja, więc po prostu pozbądź się ich najpierw. Następnie zamień przecinek na kropkę / dziesiętną i gotowe:
SELECT CONVERT(NUMERIC(10, 2),
REPLACE(
REPLACE('7.000,45', '.', ''),
',', '.'
)
) AS [Converted];
Zwroty:
7000.45
Dla kompletności powinienem wspomnieć, że próbowałem również:
SET LANGUAGE Greek;
Patrząc na różne style formatu dla CONVERT , ale tutaj nic nie ma zastosowania.
Funkcja FORMAT , ale typem danych wejściowych musi być wartość liczbowa lub data / czas / data / godzina (która została wprowadzona w SQL Server 2012, więc nie dotyczy SQL Server 2008 R2 lub starszych).
I nic innego nie działało. Miałem nadzieję znaleźć coś bardziej eleganckiego niż dwa REPLACE
połączenia, ale jak dotąd nie miałem szczęścia.
Ponadto, aby wspomnieć, chociaż nie jest to czyste rozwiązanie T-SQL, można to również osiągnąć za pomocą SQLCLR. Jest też gotowa funkcja, która robi to w bibliotece SQL # (którą napisałem) o nazwie String_TryParseToDecimal . Ta funkcja jest dostępna w wersji darmowej i działa w każdej wersji SQL Server, począwszy od SQL Server 2005:
SELECT SQL#.String_TryParseToDecimal('7.000,45', 'el-GR');
Zwroty:
7000.45000000000000000000