ISNUMERIC()
функцията в SQL Server ви позволява да проверите дали изразът е числов или не.
Въпреки това, може да има моменти, в които получавате резултати, които не сте очаквали. Това може да се случи, ако имате израз, който съдържа знак, който не е число, но все пак се приема от ISNUMERIC()
като числови.
Има куп знаци, които ISNUMERIC()
приема като числови, които може би не сте смятали за числови. Те включват знаци като плюс (+
), минус (-
) и различните символи на валута. Също така, в зависимост от неговото разположение, буквата e
може също така да позволи целият израз да бъде интерпретиран като числов.
Примери
Ето няколко примера за това, което имам предвид:
SELECT ISNUMERIC('+') AS [+], ISNUMERIC('-') AS [-], ISNUMERIC('$') AS [$], ISNUMERIC('1e2') AS [1e2], ISNUMERIC('1e+2') AS [1e+2], ISNUMERIC('e') AS [e], ISNUMERIC('e+') AS [e+];
Резултат:
+-----+-----+-----+-------+--------+-----+------+ | + | - | $ | 1e2 | 1e+2 | e | e+ | |-----+-----+-----+-------+--------+-----+------| | 1 | 1 | 1 | 1 | 1 | 0 | 0 | +-----+-----+-----+-------+--------+-----+------+
Имайте предвид, че e
и e+
връщат отрицателен резултат, когато са сами, но връщат положителен резултат, когато са заобиколени от числа.
Това вероятно е така, защото сами по себе си те не представляват число, но когато са заобиколени от числа, целият израз може да се интерпретира като научна нотация (e
и e+
често се използват в научни обозначения).
Числови типове данни
Според документацията на Microsoft, типове данни, които ISNUMERIC()
ще разпознае като числово включва следното.
Точни числа
- голям
- int
- smallint
- tinyint
- бит
Фиксирана точност
- десетичен знак
- числови
Приблизително
- плава
- истински
Парични стойности
- пари
- малки пари
В допълнение, ISNUMERIC()
връща 1 за някои знаци, които не са числа (както се вижда в горния пример). Това включва знаци като плюс (+
), минус (-
) и валидни валутни символи, като знака за долар ($
).
Също така, както се вижда в примера, буквата e
може да повлияе на резултата, когато е част от по-голям израз и в зависимост от разположението му в този израз.