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)