SQL Server 2008 varchar в десятичный приводит к: Ошибка преобразования типа данных varchar в числовой

Я пытаюсь сохранить значение, хранящееся как varchar, в десятичном поле.

Все следующие примеры приводят к: «Ошибка преобразования типа данных varchar в числовой».

что мне здесь не хватает?

SELECT CONVERT(decimal(11,2), '6.999,50') 
SELECT CONVERT(decimal(11, 2), '6.999,50')
SELECT CAST('6.999,50' AS decimal) / 100.0
SELECT CAST((CAST('6.999,50' AS decimal) / 100000) AS decimal(17,5))

person HerbalMart    schedule 04.10.2011    source источник


Ответы (2)


Вы упускаете тот факт, что 6.999,50 не является допустимым десятичным числом. У вас не может быть запятой и десятичной точки в десятичном значении? Какой номер должен быть?

Предполагая, что ваша локаль указывает . как группировка и , как десятичный разделитель: Чтобы удалить цифры группировки:

SELECT CONVERT(decimal(11,2), REPLACE('6.999,50', '.', '')) 

даст 6999,50 в виде десятичного числа

person Matt Fellows    schedule 04.10.2011
comment
Результат должен иметь формат: десятичный (11,2). Итак, я думаю, мне нужна функция, которая фильтрует цифры группировки? - person HerbalMart; 04.10.2011
comment
Я отредактировал свой ответ с примером замены, чтобы удалить '.' символ. - person Matt Fellows; 04.10.2011

Я подозреваю, что это ваши настройки локали. В вашей локали используется запятая в качестве десятичной точки и точка в качестве разделителя. Ваш сервер sql, вероятно, настроен как американский английский по умолчанию, а наоборот, точка - десятичная точка, запятая - разделитель.

person user957902    schedule 04.10.2011
comment
независимо от локали, я не думаю, что SQL справится с преобразованием varchar, содержащего символы группировки. - person Matt Fellows; 04.10.2011