Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Perché ISNUMERIC('.') restituisce 1?

Vedi IsNumeric() rotto? Solo fino a un certo punto.

SELECT CAST('.' AS MONEY) 

restituisce 0.00 (anche se il cast non riesce per int e float )

ISNUMERIC controlla solo che il valore possa essere convertito in uno qualsiasi dei tipi di dati numerici che è generalmente inutile. Di solito vuoi sapere se può essere trasmesso a un tipo specifico.

Inoltre non sembra nemmeno eseguire correttamente quell'attività per tutti i possibili input.. ISNUMERIC(' ') restituisce 0 nonostante il casting sia riuscito a int e money. Viceversa ISNUMERIC(N'8') restituisce 1 ma non esegue correttamente il cast su nulla che ho provato.

Alcune utili funzioni di supporto sono qui IsNumeric, IsInt, IsNumber.

SQL Server 2012 ha introdotto TRY_PARSE e TRY_CONVERT che aiutano molto in questo.