3 Stimmen

Wie kann ich am schnellsten prüfen, ob ein Zeichen eine Ziffer ist?

Ich habe Probleme mit der ISNUMERIC-Funktion von Sqlserver, die für ',' true zurückgibt.

Ich analysiere eine Postleitzahl und versuche zu erkennen, ob das zweite Zeichen (das eine Ziffer sein soll) eine 0 ist oder nicht, und mache in jedem Fall etwas anderes. Das Problem ist, dass ich nicht einfach das Zeichen durch die Überprüfung von isNumeric zuerst casten kann. Hier ist der Code für meine skalare Funktion, die die Ziffer in der zweiten Zeichenposition zurückgibt, und -1, wenn es keine Ziffer ist.

@declare firstDigit int

IF ISNUMERIC(SUBSTRING(@postal,2,1) AS int) = 1
   set @firstDigit = CAST(SUBSTRING(@postal,2,1) AS int)
ELSE
   set @firstDigit = -1       

RETURN @firstdigit

Da dies fehlschlägt, wenn die Postleitzahl nicht ganz gültig ist. Ich versuche gerade herauszufinden, wie ich überprüfen kann, ob das zweite Zeichen von nvarchar @postal eine Ziffer von 0-9 ist. Ich habe verschiedene Arten von Lösungen gesehen, wie zum Beispiel LIKE [0-9] oder mit PATINDEX usw.

Gibt es eine bessere/einfachere Methode, dies zu tun, und wenn nicht, welche Methode ist die schnellste?

EDIT: Code gemäß Aaron Bertrands Vorschlag hinzugefügt

ON z.postal = 
   CASE
      WHEN CONVERT(INT, CASE WHEN SUBSTRING(v.patientPostal,2,1) LIKE '[0-9]' 
          THEN SUBSTRING(v.patientPostal, 2,1) END) = 0 then v.patientPostal
      WHEN CONVERT(INT, CASE WHEN SUBSTRING(v.patientPostal,2,1) LIKE '[0-9]' 
          THEN SUBSTRING(v.patientPostal, 2,1) END) > 0 then LEFT(v.patientPostal,3)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X