SQL Server CONVERT (NUMERIC (18,0), '') завершается неудачно, но CONVERT (INT, '') завершается успешно? - PullRequest
5 голосов
/ 27 ноября 2009

PRINT CONVERT(NUMERIC(18,0), '')

производит Error converting data type varchar to numeric.

Тем не менее,

PRINT CONVERT(INT, '')

производит 0 без ошибок ...

Вопрос: есть ли для этого какой-нибудь флаг SQL Server или мне нужно будет делать операторы case для каждого преобразования varchar в числовое значение? (кроме очевидного почему?)

Ответы [ 3 ]

8 голосов
/ 27 ноября 2009

Использование ISNUMERIC

declare @a varchar(20)
set @a = 'notanumber'
select case when isnumeric(@a) = 0 then 0 else convert(numeric(18,0),@a) end
2 голосов
/ 28 ноября 2009

ISNUMERIC не всегда работает должным образом: в частности, он возвращает True для некоторых значений, которые впоследствии не могут быть преобразованы в числовые.

В этой статье описывается проблема и предлагается способ ее решения с помощью пользовательских функций.

2 голосов
/ 28 ноября 2009

Пустая строка будет преобразована в ноль для типов float и int, но не десятичная. (И конвертируется в 01 января 1900 года для datetime = ноль). Я не знаю почему .. это просто ...

Если вам нужно десятичное число (18,0), используйте вместо него bigint. Или сначала разыграть с помощью поплавка

ISNUMERIC будет принимать - и . и 1.2E3 как число, но все не преобразуются в десятичную.

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