Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Warum gibt ISNUMERIC('.') 1 zurück?

Siehe IsNumeric() defekt? Nur bis zu einem gewissen Punkt.

SELECT CAST('.' AS MONEY) 

gibt 0.00 zurück (obwohl die Umwandlung für int fehlschlägt und float )

ISNUMERIC prüft nur, ob der Wert in einen der numerischen Datentypen umgewandelt werden kann, was im Allgemeinen nutzlos ist. Normalerweise möchten Sie wissen, ob es in einen bestimmten Typ umgewandelt werden kann.

Außerdem scheint es nicht einmal diese Aufgabe für alle möglichen Eingaben korrekt zu erledigen.. ISNUMERIC(' ') gibt 0 zurück trotz erfolgreichem Casting sowohl auf int als auch auf money. Umgekehrt ISNUMERIC(N'8') gibt 1 zurück aber nicht erfolgreich in etwas umgewandelt, was ich versucht habe.

Einige nützliche Hilfsfunktionen dafür sind hier IsNumeric, IsInt, IsNumber.

SQL Server 2012 hat TRY_PARSE eingeführt und TRY_CONVERT die dabei sehr helfen.