Zie IsNumeric() Gebroken? Slechts tot op zekere hoogte.
SELECT CAST('.' AS MONEY)
retourneert 0.00
(hoewel de cast mislukt voor int
en float
)
ISNUMERIC
controleert alleen of de waarde kan worden gecast naar een van de numerieke datatypes, wat over het algemeen nutteloos is. Meestal wil je weten of het naar een bepaald type gecast kan worden.
Bovendien lijkt het die taak niet eens correct uit te voeren voor alle mogelijke invoer. ISNUMERIC(' ')
retourneert 0
ondanks succesvol casten naar zowel int als geld. Omgekeerd ISNUMERIC(N'8')
retourneert 1
maar cast niet succesvol naar alles wat ik heb geprobeerd.
Enkele handige hulpfuncties daarvoor zijn hier IsNumeric, IsInt, IsNumber.
SQL Server 2012 introduceerde TRY_PARSE
en TRY_CONVERT
die hierbij enorm helpen.