Конвертировать длинные десятичные или с плавающей точкой в ​​VARCHAR в SQL Server - PullRequest
0 голосов
/ 13 января 2012

В одной из таблиц, которые я пытаюсь сделать запрос, есть поле с типом decimal(38,19). Мне нужно преобразовать его в varchar, чтобы мой модуль Perl DBI мог его обработать. Как мне написать преобразование в SQL, чтобы оно работало? В частности, если я запускаю это в SQL Server Management Studio:

select convert(varchar, 19040220000.0000000000000000000)

Я получаю:

Сообщение 8115, Уровень 16, Состояние 5, Строка 1
Ошибка арифметического переполнения при преобразовании чисел в тип данных varchar.

Сначала я попытался округлить число:

select convert(varchar, round(19040220000.0000000000000000000, 0))

но, похоже, это тоже не работает (то же сообщение об ошибке). На самом деле round(), похоже, не влияет на это число по какой-то причине. Что я должен делать? Thx.

Ответы [ 2 ]

4 голосов
/ 13 января 2012

Если вы не укажете длину для varchar, по умолчанию будет 30 символов в случае операции CONVERT.

Этого недостаточно для хранения вашего 38-значного десятичного числа. Поэтому укажите varchar соответствующую длину в выражении CONVERT !!

Попробуйте это:

select convert(varchar(40), 19040220000.0000000000000000000)
0 голосов
/ 13 января 2012

Вам нужно использовать varchar с заданной длиной, превышающей желаемую точность, т. Е.

select convert(varchar(64), 19040220000.0000000000000000000)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...