( 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 REPLACEpołą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