sql >> Databasteknik >  >> RDS >> Sqlserver

Icke-nummertecken som returnerar positivt när ISNUMERIC() används i SQL Server

ISNUMERIC() funktion i SQL Server låter dig kontrollera om ett uttryck är numeriskt eller inte.

Det kan dock finnas tillfällen då du får resultat som du inte förväntade dig. Detta kan hända om du har ett uttryck som innehåller ett tecken som inte är ett tal, men som fortfarande accepteras av ISNUMERIC() som numerisk.

Det finns ett gäng tecken som ISNUMERIC() accepterar som numeriska som du kanske inte har tänkt på som numeriska. Dessa inkluderar tecken som plus (+ ), minus (- ), och de olika valutasymbolerna. Beroende på dess placering, bokstaven e kan också tillåta att hela uttrycket tolkas som numeriskt.

Exempel

Här är några exempel på vad jag menar:

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

Observera att e och e+ returnera ett negativt resultat när de är på egen hand, men returnera ett positivt resultat när de omges av siffror.

Detta beror förmodligen på att de i sig inte representerar ett tal, men när de är omgivna av siffror kan hela uttrycket tolkas som vetenskaplig notation (e och e+ används ofta i vetenskaplig notation).

Numeriska datatyper

Enligt Microsofts dokumentation, datatyper som ISNUMERIC() kommer att känna igen som numerisk inkluderar följande.

Exakta siffror

  • stor
  • int
  • smallint
  • tinyint
  • bit

Fast precision

  • decimal
  • numerisk

Ungefärlig

  • flyta
  • riktigt

Monetära värden

  • pengar
  • småpengar

Dessutom ISNUMERIC() returnerar 1 för vissa tecken som inte är siffror (som framgår av exemplet ovan). Detta inkluderar tecken som plus (+ ), minus (- ), och giltiga valutasymboler som dollartecknet ($ ).

Likaså, som sett i exemplet, bokstaven e kan påverka resultatet när det är en del av ett större uttryck, och beroende på dess placering i det uttrycket.


  1. Bygga en MySQL eller MariaDB Databas Cold Standby på Amazon AWS

  2. Skapa och få åtkomst till OLTP-databaser och tabeller i minnet

  3. Hur man använder "Gilla" i SQL

  4. VBA:s funktion för att ändra fall