У меня есть база данных Microsoft SQL 2008 R2, которая хранит десятичные дроби как Nvarchar (20).По какой-то причине все поля дополняются пробелами.
Преобразование завершается с ошибкой:
" Сообщение 8114, уровень 16, состояние 5, строка 7
Ошибка преобразования данныхвведите nvarchar в числовое значение."
Я удаляю пробелы с RTRIM()
, заменяю запятую точкой с помощью REPLACE()
и преобразую с помощью CAST()
.Эта строка не удастся.Я добавил вторую строку без приведения, просто чтобы визуально проверить значение, но не смог увидеть причину его сбоя.Затем я снова раскомментировал свою первую строку, и кастинг сработал.Но только если вторая строка вместе с ней.Я понятия не имею, что вызывает это.
SELECT
CAST(REPLACE(RTRIM(nvarcharDecimalValue),',','.') AS DECIMAL(12,3)) as WillFailIfAlone,
REPLACE(RTRIM(nvarcharDecimalValue),',','.') as NeedToBeHere
FROM myTable
Значение, которое я ожидаю получить взамен, - это любое десятичное число, разделенное точкой.Выполнение запроса только с вручную введенным значением работает нормально.
Например, это:
SELECT
CAST(REPLACE(RTRIM(' 5,86'),',','.') AS DECIMAL(18,3)) AS test