ISNUMERIC()
funkcja w SQL Server umożliwia sprawdzenie, czy wyrażenie jest numeryczne.
Jednak mogą się zdarzyć sytuacje, w których uzyskasz wyniki, których się nie spodziewałeś. Może się to zdarzyć, jeśli masz wyrażenie zawierające znak, który nie jest liczbą, ale jest nadal akceptowany przez ISNUMERIC()
jako numeryczne.
Istnieje kilka znaków, które ISNUMERIC()
akceptuje jako numeryczne, o których być może nie myślałeś. Należą do nich znaki takie jak plus (+
), minus (-
) oraz różne symbole walut. Ponadto, w zależności od położenia, litera e
może również pozwolić na interpretację całego wyrażenia jako liczbowego.
Przykłady
Oto kilka przykładów tego, co mam na myśli:
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+];
Wynik:
+-----+-----+-----+-------+--------+-----+------+ | + | - | $ | 1e2 | 1e+2 | e | e+ | |-----+-----+-----+-------+--------+-----+------| | 1 | 1 | 1 | 1 | 1 | 0 | 0 | +-----+-----+-----+-------+--------+-----+------+
Zauważ, że e
i e+
zwracają wynik ujemny, gdy są same, ale zwracają wynik dodatni, gdy są otoczone liczbami.
Dzieje się tak prawdopodobnie dlatego, że same w sobie nie reprezentują liczby, ale gdy są otoczone liczbami, całe wyrażenie może być interpretowane jako notacja naukowa (e
i e+
są często używane w notacji naukowej).
Liczbowe typy danych
Zgodnie z dokumentacją Microsoft, typy danych, które ISNUMERIC()
będą rozpoznawać jako liczbowe następujące elementy.
Dokładne wartości liczbowe
- duże
- wew
- mały
- maleńkie
- trochę
Stała precyzja
- dziesiętny
- numeryczne
W przybliżeniu
- unosić się
- prawdziwe
Wartości pieniężne
- pieniądze
- małe pieniądze
Ponadto ISNUMERIC()
zwraca 1 dla niektórych znaków, które nie są liczbami (jak widać w powyższym przykładzie). Obejmuje to znaki takie jak plus (+
), minus (-
) oraz prawidłowe symbole walut, takie jak znak dolara ($
).
Jak widać na przykładzie, litera e
może wpływać na wynik, gdy jest częścią większego wyrażenia i w zależności od jego umieszczenia w tym wyrażeniu.