Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Por que ISNUMERIC('.') retorna 1?


Consulte IsNumeric() Quebrado? Só até certo ponto.
SELECT CAST('.' AS MONEY) 

retorna 0.00 (embora a conversão falhe para int e float )

ISNUMERIC apenas verifica se o valor pode ser convertido em qualquer um dos tipos de dados numéricos, o que geralmente é inútil. Normalmente você quer saber se ele pode ser convertido para um tipo específico.

Além disso, nem parece fazer essa tarefa corretamente para todas as entradas possíveis.. ISNUMERIC(' ') retorna 0 apesar de lançar com sucesso tanto para int quanto para dinheiro. Por outro lado ISNUMERIC(N'8') retorna 1 mas não converte com sucesso para nada que eu tentei.

Algumas funções auxiliares úteis para isso estão aqui IsNumeric, IsInt, IsNumber.

O SQL Server 2012 introduziu o TRY_PARSE e TRY_CONVERT que ajudam muito nisso.