( Если вы используете SQL Server 2012 или новее, см. Ответ @ wBob для более чистого подхода. Подход, изложенный в моем ответе ниже, требуется только в том случае, если вы используете SQL Server 2008 R2 или более раннюю версию . )
Вам не нужен (или не нужен) разделитель тысяч при преобразовании NUMERIC
, независимо от того, запятая ли это, точка или пробел, поэтому сначала просто избавьтесь от них. Затем преобразуйте запятую в точку / десятичную точку, и все готово:
SELECT CONVERT(NUMERIC(10, 2),
REPLACE(
REPLACE('7.000,45', '.', ''),
',', '.'
)
) AS [Converted];
Возвращает:
7000.45
Для полноты картины должен упомянуть, что я также попробовал:
SET LANGUAGE Greek;
Рассматривая различные стили форматирования для CONVERT , но здесь ничего не применимо.
Функция FORMAT , но тип ввода должен быть числовым или значением даты / времени / даты / времени (оно и было введено в SQL Server 2012, поэтому не применимо к SQL Server 2008 R2 или более ранней версии).
И ничто иное, казалось, не сработало. Я надеялся найти что-то более элегантное, чем два REPLACE
звонка, но пока не повезло.
Кроме того, просто чтобы упомянуть, хотя это и не чисто решение T-SQL, это также может быть достигнуто с помощью SQLCLR. И есть готовая функция, которая делает это в библиотеке SQL # (которую я написал) с именем String_TryParseToDecimal . Эта функция доступна в бесплатной версии и работает в каждой версии SQL Server, начиная с SQL Server 2005:
SELECT SQL#.String_TryParseToDecimal('7.000,45', 'el-GR');
Возвращает:
7000.45000000000000000000