У меня есть цифры длиной 6 символов с 3 подразумеваемыми десятичными знаками. Номер примера будет 035000. Таким образом, это число 35 [EDITED]. Как я могу преобразовать это из nvarchar
в decimal(6,3)
?
Когда я пытаюсь CAST(col as decimal(6,3)
я получаю ошибку:
Ошибка арифметического переполнения, преобразующая nvarchar в тип данных числовой.
Я также попытался разобрать ведущий 0, используя
select CAST(SUBSTRING(col, patindex('%[^0]%', col), 6) as decimal(6, 3))
from my_table
Однако я получил то же сообщение об ошибке. Или это то, что я должен оставить в БД как nvarchar
, и конвертировать в мой код С#?
Вы не можете преобразовать '035000' в NUMERIC(6,3)
потому что у него слишком много цифр: числовое представление этого числа 35000.000, которое составляет 8 цифр.
Поскольку вы знаете, что ваши номера всегда будут 6 цифр в вашей базе данных, вы должны сначала преобразовать в NUMERIC(6,0)
(или любой другой числовой тип, который может его удерживать - например, INTEGER
), а затем разделить на правильные фактор, чтобы сдвинуть десятичную дробь на место. (Вы сказали, что есть 3 подразумеваемых десятичных разряда, но ваш пример показывает 4 - просто используйте какой бы вам нужный вам коэффициент пересчета):
SELECT CONVERT(NUMERIC(6, 3), CONVERT(NUMERIC(6, 0), col) / 1000.0) FROM my_table