Zobacz IsNumeric() jest uszkodzony? Tylko do pewnego momentu.
SELECT CAST('.' AS MONEY)
zwraca 0.00
(chociaż rzutowanie nie powiedzie się dla int
i float
)
ISNUMERIC
po prostu sprawdza, czy wartość może być rzutowana na dowolny z numerycznych typów danych, co jest generalnie bezużyteczne. Zwykle chcesz wiedzieć, czy można go rzutować na określony typ.
Dodatkowo wydaje się, że nawet nie wykonuje tego zadania poprawnie dla wszystkich możliwych danych wejściowych.. ISNUMERIC(' ')
zwraca 0
pomimo pomyślnego rzucenia zarówno na int, jak i na pieniądze. I odwrotnie ISNUMERIC(N'8')
zwraca 1
ale nie przesyła pomyślnie do niczego, czego próbowałem.
Oto kilka przydatnych funkcji pomocniczych IsNumeric, IsInt, IsNumber.
Wprowadzono SQL Server 2012 TRY_PARSE
i TRY_CONVERT
które bardzo w tym pomagają.