Почему ISNUMERIC ('.') Возвращает 1? - PullRequest
12 голосов
/ 13 сентября 2011

Недавно я работал с ISNUMERIC в SQL Server, когда столкнулся с проблемой, которая привела к нахождению этого фрагмента кода.0 как в ложном?

Ответы [ 3 ]

18 голосов
/ 13 сентября 2011

См. IsNumeric () сломан? Только до точки .

SELECT CAST('.' AS MONEY) 

возвращает 0.00 (хотя приведение не удается для int и float)

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

Кроме того, похоже, что эта задача не выполняется правильно для всех возможных входных данных. . ISNUMERIC(' ') возвращает 0 несмотря на успешное приведение как к int, так и к деньгам. И наоборот, ISNUMERIC(N'8') возвращает 1, но не приводит ни к чему успешно выполненному мною.

Некоторые полезные вспомогательные функции для этого здесь IsNumeric, IsInt, IsNumber .

В SQL Server 2012 введены TRY_PARSE и TRY_CONVERT, которые сильно помогают в этом.

1 голос
/ 13 сентября 2011

Потому что "."используется в десятичном числе!

см. здесь

isnumeric для '-' & '.'Почему isnumeric ('-') и isnumeric ('.') Возвращают 1?

Ответ: Потому что "-" означает отрицательный, а "."используется в десятичном числе.Я понятия не имею, почему они назвали это ISNUMERIC все же.Они должны были назвать это, НЕИЗВЕСТНО.

0 голосов
/ 13 сентября 2011

Я думаю, что он также интерпретирует ряд других нечисловых полей как числовые, дополнительная информация здесь -

http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html

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