Mit IF IsNumeric als Argument
ich Frage mich, wie IsNumeric verwenden, die in SQL, ist es ein bisschen anders aus VBScript, aber ich glaube, ich war in der Lage, dies zu umgehen, sprich:
IF 1 = ISNUMERIC('5675754674')
BEGIN
...
END
Wäre dies eine Möglichkeit, um es? Was ich wirklich tun wollen ist:
IF ISNUMERIC('5675754674')
BEGIN
...
END
aber das gibt eine Fehlermeldung. Beispiel 1 scheint zu funktionieren, aber nur sicherstellen, dass ich mache dieses Recht, war nicht in der Lage zu finden, eine gute online-Ressourcen über es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine
boolean
im SQL-Server. Das heißt, Sie können nicht einfach sagen:IF (expression)
; Sie müssen vergleichen Sie es mit etwas, weil es zurücktrue
oderfalse
im gleichen Sinne, wie Sie wahrscheinlich gewöhnt sind, in anderen Sprachen.Nur eine Vorliebe, aber ich würde es bevorzugen, schreiben Sie es auf diese Weise:
Gibt es keine Möglichkeit, in SQL Server zu vermeiden, den Vergleich zu 1, wie in deinem zweiten Beispiel.
Auch nebenbei sollten Sie sich bewusst sein, die Schwächen
ISNUMERIC()
- es kann zu falschen positiven für die "numerische" Werte wie.
,CHAR(9)
,e
,$
und eine Vielzahl von anderen nicht-numerischen strings. Wenn Sie wissen wollen, wenn etwas ist eine ganze Zahl, zum Beispiel, besser, zu sagen:Aber auch das ist nicht eine vollständige und gültige test, weil es wird true zurückgegeben, für die Werte
> (2^32)-1
und es wird false zurückgegeben, für negative Werte.Anderen Nachteil
ISNUMERIC()
ist, dass es Sie gibt true zurück, wenn der Wert konvertiert werden kann alle der numerischen Typen, das ist nicht das gleiche wie alle numerische Typen. Oft Menschen test fürISNUMERIC()
und dann versuchen Sie werfen einenFLOAT
zu einemSMALLINT
und die Konvertierung schlägt fehl.In SQL Server 2012 haben Sie eine neue Methode namens
TRY_CONVERT()
gibtNULL
wenn die Umwandlung in den angegebenen Datentyp nicht gültig ist.Sind Sie richtig, ISNUMERIC() gibt einen int.
Sie können überprüfen Sie die Dokumentation: ISNUMERIC()
Den
IF
- Anweisung in SQL erfordert einen booleschen Ausdruck nach demIF
- siehe in der MSDN-Referenz.SQL ist nicht die beste im Umgang casting zwischen Arten, ohne mit so etwas wie
CAST()
oderCONVERT()
, was bedeutet, dass dieint
WertISUNUMERIC()
Rücksendungen werden nur gelöst werden als boolean, wenn Sie einige Komparator (=,<,>,etc) zu erzeugen, um ein true/false Ergebnis.IF ISNUMERIC('5675754674') = 1
ist wahrscheinlich der beste Weg, dies zu schreiben, in TSQL - es beschreibt klar die Absicht", Wenn in diesem Wert ausführen über diese Funktion gibt 1 zurück, (kann bewertet werden, da ein numerischer Datentyp), dann Mach das Ding.'Mit diesem im Verstand, sollten Sie sich bewusst sein, dass
ISNUMERIC
nur prüft, ob der Wert, den Sie übergeben, wird die Bewertung um -jeden - verfügbaren numerischen Datentyp. Dies kann zu Schwierigkeiten führen, wenn die Daten, die Sie durchzieht, enthält wissenschaftliche notation oder andere Unregelmäßigkeiten; siehe hier für weitere Informationen.