Подтвердить что ты не робот

Почему ISNUMERIC ('.') Возвращает 1?

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

SELECT ISNUMERIC('.')

Это возвращает 1, как в true, не должно ли это возвращать 0, как в false?

4b9b3361

Ответ 1

См. 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, которые очень помогают в этом.

Ответ 2

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

см. здесь

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

Ответ: Потому что "-" означает отрицательный и "." используется в десятичной системе номер. Я не знаю, почему они назвали его ISNUMERIC. Oни должен был назвать его ISNUMBERRELATED.