sql >> Database teknologi >  >> RDS >> Sqlserver

Ikke-taltegn, der returnerer positivt, når der bruges ISNUMERIC() i SQL Server

ISNUMERIC() funktion i SQL Server giver dig mulighed for at kontrollere, om et udtryk er numerisk eller ej.

Der kan dog være tidspunkter, hvor du får resultater, som du ikke havde forventet. Dette kan ske, hvis du har et udtryk, der indeholder et tegn, der ikke er et tal, men som stadig accepteres af ISNUMERIC() som værende numerisk.

Der er en masse tegn, der ISNUMERIC() accepterer som numerisk, som du måske ikke har tænkt på som numerisk. Disse omfatter tegn såsom plus (+ ), minus (- ), og de forskellige valutasymboler. Afhængigt af dens placering, bogstavet e kunne også tillade, at hele udtrykket fortolkes som numerisk.

Eksempler

Her er nogle eksempler på, hvad jeg mener:

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+];

Resultat:

+-----+-----+-----+-------+--------+-----+------+
| +   | -   | $   | 1e2   | 1e+2   | e   | e+   |
|-----+-----+-----+-------+--------+-----+------|
| 1   | 1   | 1   | 1     | 1      | 0   | 0    |
+-----+-----+-----+-------+--------+-----+------+

Bemærk, at e og e+ returnere et negativt resultat, når de er på egen hånd, men returnere et positivt resultat, når de er omgivet af tal.

Dette skyldes sandsynligvis, at de i sig selv ikke repræsenterer et tal, men når de er omgivet af tal, kan hele udtrykket fortolkes som videnskabelig notation (e og e+ bruges ofte i videnskabelig notation).

Numeriske datatyper

Ifølge Microsoft-dokumentationen, datatyper, der ISNUMERIC() vil genkende som numerisk inkludere følgende.

Nøjagtige tal

  • stor
  • int
  • smallint
  • tinyint
  • bit

Fast præcision

  • decimal
  • numerisk

Omtrentlig

  • flyde
  • rigtig

Monetære værdier

  • penge
  • småpenge

Derudover ISNUMERIC() returnerer 1 for nogle tegn, der ikke er tal (som det ses i ovenstående eksempel). Dette inkluderer tegn såsom plus (+ ), minus (- ), og gyldige valutasymboler såsom dollartegnet ($ ).

Også, som det ses i eksemplet, bogstavet e kan påvirke resultatet, når det er en del af et større udtryk, og afhængigt af dets placering i det udtryk.


  1. Hvordan opretter man funktion i PL/SQL?

  2. MySQL på Azure Performance Benchmark – ScaleGrid vs. Azure Database

  3. CASE vs. DECODE

  4. Hvordan fortolkes sql med rekursiv sætning?