sql >> Database >  >> RDS >> Sqlserver

Niet-cijferige tekens die positief retourneren bij gebruik van ISNUMERIC() in SQL Server

De ISNUMERIC() functie in SQL Server stelt u in staat om te controleren of een uitdrukking al dan niet numeriek is.

Het kan echter voorkomen dat u resultaten krijgt die u niet had verwacht. Dit kan gebeuren als u een uitdrukking heeft die een teken bevat dat geen getal is, maar toch wordt geaccepteerd door ISNUMERIC() als numeriek.

Er zijn een aantal tekens die ISNUMERIC() accepteert als numeriek waarvan u misschien niet had gedacht dat het numeriek was. Deze omvatten tekens zoals plus (+ ), min (- ), en de verschillende valutasymbolen. Ook, afhankelijk van de plaatsing, de letter e kan ook toestaan ​​dat de hele uitdrukking als numeriek wordt geïnterpreteerd.

Voorbeelden

Hier zijn enkele voorbeelden van wat ik bedoel:

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

Resultaat:

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

Merk op dat de e en e+ een negatief resultaat retourneren wanneer ze alleen zijn, maar een positief resultaat retourneren wanneer ze worden omringd door getallen.

Dit komt waarschijnlijk omdat ze op zichzelf geen getal vertegenwoordigen, maar als ze worden omringd door getallen, kan de hele uitdrukking worden geïnterpreteerd als wetenschappelijke notatie (e en e+ worden vaak gebruikt in wetenschappelijke notatie).

Numerieke gegevenstypen

Volgens de Microsoft-documentatie zijn gegevenstypen die ISNUMERIC() herkent als numeriek onder meer het volgende.

Exacte cijfers

  • groot
  • int
  • klein
  • tinyint
  • beetje

Vaste precisie

  • decimaal
  • numeriek

Bij benadering

  • zweven
  • echt

Monetaire waarden

  • geld
  • kleingeld

Bovendien, ISNUMERIC() geeft 1 terug voor sommige tekens die geen cijfers zijn (zoals te zien is in het bovenstaande voorbeeld). Dit omvat tekens zoals plus (+ ), min (- ), en geldige valutasymbolen zoals het dollarteken ($ ).

Ook, zoals te zien in het voorbeeld, de letter e kan het resultaat beïnvloeden wanneer het deel uitmaakt van een grotere uitdrukking, en afhankelijk van de plaatsing in die uitdrukking.


  1. Snelste manier om niet-numerieke tekens uit een VARCHAR in SQL Server te verwijderen

  2. Bulksgewijs gegevensbestanden invoegen in SQL Server

  3. MySQL-gebruikersbeheer

  4. Moet de variabele @myvariable-fout declareren met een ADO-geparametriseerde query