Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Nicht-Zahlenzeichen, die positiv zurückgegeben werden, wenn ISNUMERIC() in SQL Server verwendet wird

Die ISNUMERIC() Mit der Funktion in SQL Server können Sie überprüfen, ob ein Ausdruck numerisch ist oder nicht.

Es kann jedoch vorkommen, dass Sie Ergebnisse erhalten, die Sie nicht erwartet haben. Dies könnte passieren, wenn Sie einen Ausdruck haben, der ein Zeichen enthält, das keine Zahl ist, aber trotzdem von ISNUMERIC() akzeptiert wird als numerisch.

Es gibt eine Reihe von Zeichen, die ISNUMERIC() sind akzeptiert als numerisch, was Sie möglicherweise nicht als numerisch angesehen haben. Dazu gehören Zeichen wie Pluszeichen (+ ), minus (- ) und die verschiedenen Währungssymbole. Außerdem je nach Platzierung der Buchstabe e könnte auch zulassen, dass der gesamte Ausdruck als numerisch interpretiert wird.

Beispiele

Hier sind einige Beispiele dafür, was ich meine:

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

Ergebnis:

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

Beachten Sie, dass das e und e+ geben ein negatives Ergebnis zurück, wenn sie alleine sind, aber geben ein positives Ergebnis zurück, wenn sie von Zahlen umgeben sind.

Dies liegt wahrscheinlich daran, dass sie für sich genommen keine Zahl darstellen, aber wenn sie von Zahlen umgeben sind, könnte der gesamte Ausdruck als wissenschaftliche Notation interpretiert werden (e und e+ werden oft in wissenschaftlicher Schreibweise verwendet).

Numerische Datentypen

Laut der Microsoft-Dokumentation sind Datentypen ISNUMERIC() wird Folgendes als numerisch erkennen.

Exakte Zahlen

  • großartig
  • int
  • Smallint
  • winzig
  • bisschen

Feste Genauigkeit

  • dezimal
  • numerisch

Ungefähr

  • schwimmen
  • echt

Monetäre Werte

  • Geld
  • Kleingeld

Außerdem ISNUMERIC() gibt 1 für einige Zeichen zurück, die keine Zahlen sind (wie im obigen Beispiel zu sehen). Dazu gehören Zeichen wie Pluszeichen (+ ), minus (- ) und gültige Währungssymbole wie das Dollarzeichen ($ ).

Außerdem, wie im Beispiel zu sehen, der Buchstabe e kann das Ergebnis beeinflussen, wenn es Teil eines größeren Ausdrucks ist, und abhängig von seiner Platzierung in diesem Ausdruck.