Ich habe mich gefragt, wie man IsNumeric in SQL benutzt, es ist etwas anders als VBScript, aber ich glaube, ich konnte es umgehen, zB:
%Vor%Würde das ein Weg sein? Was ich wirklich machen möchte ist:
%Vor%aber das gibt einen Fehler. Beispiel 1 scheint zu funktionieren, aber nur sicherzustellen, dass ich das richtig mache, konnte online keine guten Ressourcen darüber finden.
Es gibt keine boolean
in SQL Server. Das heißt, Sie können nicht einfach IF (expression)
sagen; Sie müssen es mit etwas vergleichen, weil es true
oder false
in dem Sinne zurückgibt, wie Sie es wahrscheinlich in anderen Sprachen gewohnt sind.
Nur eine Vorliebe, aber ich würde es lieber so schreiben:
%Vor%In SQL Server gibt es keine Möglichkeit, den Vergleich mit 1 zu vermeiden, wie in Ihrem zweiten Beispiel.
Außerdem sollten Sie sich der Schwächen von ISNUMERIC()
bewusst sein - es kann falsche positive Werte für "numerische" Werte wie .
, CHAR(9)
, e
, $
und einen Host von andere nicht numerische Zeichenfolgen. Wenn Sie wissen wollen, ob etwas eine ganze Zahl ist, sagen Sie besser:
Aber selbst das ist kein vollständiger und gültiger Test, weil es für die Werte > (2^32)-1
den Wert true zurückgibt und für negative Werte false zurückgibt.
Ein weiterer Nachteil von ISNUMERIC()
ist, dass es true zurückgibt, wenn der Wert in any der numerischen Typen konvertiert werden kann, was nicht identisch mit all numeric ist Arten. Oft testen Nutzer auf ISNUMERIC()
und versuchen dann, FLOAT
auf SMALLINT
zu konvertieren und die Konvertierung schlägt fehl.
In SQL Server 2012 haben Sie eine neue Methode namens TRY_CONVERT()
, die NULL
zurückgibt, wenn die Konvertierung in den angegebenen Datentyp nicht gültig ist.
Sie haben recht, ISNUMERIC () gibt einen int zurück. Sie können die Dokumentation überprüfen: ISNUMERIC ()
Die IF
-Anweisung in SQL benötigt einen booleschen Ausdruck nach dem IF
- siehe die MSDN-Referenz hier.
SQL ist nicht die beste Methode, Casting zwischen Typen zu handhaben, ohne etwas wie CAST()
oder CONVERT()
zu verwenden, was bedeutet, dass die int
value ISUNUMERIC()
Rückgaben nur als Boolean aufgelöst werden, wenn Sie einen Komparator verwenden (=, & lt;, & gt; usw.), um ein wahres / falsches Ergebnis zu erzeugen.
IF ISNUMERIC('5675754674') = 1
ist wahrscheinlich der beste Weg, dies in TSQL zu schreiben - es beschreibt deutlich die Absicht von 'Wenn dieser Wert durch diese Funktion 1 zurückliefert (kann als numerischer Datentyp ausgewertet werden), dann tu das Ding. "
Vor diesem Hintergrund sollten Sie sich bewusst sein, dass ISNUMERIC
nur überprüft, ob der übergebene Wert für jeden verfügbaren numerischen Datentyp ausgewertet wird. Dies kann zu Problemen führen, wenn die Daten, die Sie durchlaufen, wissenschaftliche Notationen oder andere Unregelmäßigkeiten enthalten. Weitere Informationen finden Sie hier .
Tags und Links sql-server sql-server-2008 tsql