Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Znaki nieliczbowe, które zwracają wartość dodatnią podczas używania ISNUMERIC() w SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak dynamicznie mapować kolumny wejściowe i wyjściowe w SSIS?

  2. Wysoka dostępność programu SQL Server:Zainstaluj wystąpienie klastra trybu failover programu SQL Server, część 2

  3. Jak ustawić domyślny język dla wszystkich nowych loginów w SQL Server (T-SQL)

  4. Porady Brenta Ozara i Pinala Dave dotyczące wydajności SQL Server

  5. SQL - Jak przechowywać i nawigować w hierarchiach?