SQL Преобразование nvarchar с ведущими нулями в десятичную

1

У меня есть цифры длиной 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, и конвертировать в мой код С#?

  • 3
    035000, если мы попытаемся заменить на 3 знака после запятой, я думаю, что это будет 35. Вы уверены в примере?
  • 2
    Вы пытались привести его к целому числу, а затем разделить на 1000?
Теги:
tsql
sql-server-2008

1 ответ

7
Лучший ответ

Вы не можете преобразовать '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
  • 0
    Просто предложите использовать этот WHERE col не нуль и ISNUMERIC (col) = 1, чтобы он не потерпел неудачу в случае символов или нулевых значений.
  • 0
    спасибо, это звучит так, как будто это должно работать. Я проверю завтра и обновлю как ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню