Вижте IsNumeric() счупен? Само до определен момент.
SELECT CAST('.' AS MONEY)
връща 0.00
(въпреки че прехвърлянето е неуспешно за int
и float
)
ISNUMERIC
просто проверява дали стойността може да бъде прехвърлена към всеки един от числовите типове данни, което обикновено е безполезно. Обикновено искате да знаете дали може да бъде прехвърлен към конкретен тип.
Освен това изглежда дори не изпълнява тази задача правилно за всички възможни входове.. ISNUMERIC(' ')
връща 0
въпреки успешното хвърляне както към int, така и към парите. Обратно ISNUMERIC(N'8')
връща 1
но не прехвърля успешно към нищо, което опитах.
Някои полезни помощни функции за това са тук IsNumeric, IsInt, IsNumber.
SQL Server 2012 въведе TRY_PARSE
и TRY_CONVERT
които помагат много за това.