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 може да повлияе на резултата, когато е част от по-голям израз и в зависимост от разположението му в този израз.