Se IsNumeric() Broken? Bara upp till en viss punkt.
SELECT CAST('.' AS MONEY)
returnerar 0.00
(även om casten misslyckas för int
och float
)
ISNUMERIC
kontrollerar bara att värdet kan kastas till vilken som helst av de numeriska datatyperna vilket i allmänhet är värdelöst. Vanligtvis vill du veta om den kan gjutas till en specifik typ.
Dessutom verkar det inte ens göra den uppgiften korrekt för alla möjliga indata.. ISNUMERIC(' ')
returnerar 0
trots casting framgångsrikt till både int och pengar. Omvänt ISNUMERIC(N'8')
returnerar 1
men kastar inte framgångsrikt till något som jag försökte.
Några användbara hjälpfunktioner för det finns här IsNumeric, IsInt, IsNumber.
SQL Server 2012 introducerade TRY_PARSE
och TRY_CONVERT
som hjälper till mycket med detta.