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

Caratteri non numerici che restituiscono positivi quando si utilizza ISNUMERIC() in SQL Server

Il ISNUMERIC() La funzione in SQL Server consente di verificare se un'espressione è numerica.

Tuttavia, ci possono essere momenti in cui ottieni risultati che non ti aspettavi. Questo potrebbe accadere se hai un'espressione che contiene un carattere che non è un numero, ma è comunque accettato da ISNUMERIC() come numerico.

Ci sono un sacco di caratteri che ISNUMERIC() accetta come numerico che potresti non aver pensato come numerico. Questi includono caratteri come più (+ ), meno (- ) e i vari simboli di valuta. Inoltre, a seconda della sua posizione, la lettera e potrebbe anche consentire l'interpretazione dell'intera espressione come numerica.

Esempi

Ecco alcuni esempi di cosa intendo:

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

Risultato:

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

Nota che il e e e+ restituiscono un risultato negativo quando sono soli, ma restituiscono un risultato positivo quando sono circondati da numeri.

Questo probabilmente perché, da soli, non rappresentano un numero, ma quando sono circondati da numeri, l'intera espressione potrebbe essere interpretata come notazione scientifica (e e e+ sono spesso usati nella notazione scientifica).

Tipi di dati numerici

Secondo la documentazione Microsoft, i tipi di dati ISNUMERIC() riconoscerà come numerico include quanto segue.

Numeri esatti

  • grande
  • int
  • piccolo
  • piccolo
  • un po'

Precisione fissa

  • decimale
  • numerico

Approssimativo

  • galleggiante
  • reale

Valori monetari

  • soldi
  • piccoli soldi

Inoltre, ISNUMERIC() restituisce 1 per alcuni caratteri che non sono numeri (come visto nell'esempio precedente). Ciò include caratteri come più (+ ), meno (- ) e simboli di valuta validi come il simbolo del dollaro ($ ).

Inoltre, come si vede nell'esempio, la lettera e può influenzare il risultato quando fa parte di un'espressione più ampia e in base alla sua posizione in quell'espressione.