it-swarm.com.de

Ungültiger Längenparameter an die Funktion LEFT oder SUBSTRING übergeben

Ich habe einige dieser Fragen gesehen, aber keine entdeckt, die geholfen hat !! Ich versuche, nur den ersten Teil einer Postleitzahl auszuwählen und alles nach dem Leerzeichen zu ignorieren. Der Code, den ich benutze, ist

SUBSTRING(PostCode, 1 , CHARINDEX(' ', PostCode ) -1)

es wird jedoch ein ungültiger Längenparameter an die Funktion LEFT oder SUBSTRING übergeben. Es gibt keine Nullen oder Leerzeichen, aber einige haben nur den ersten Teil. Verursacht dies den Fehler und wenn ja, wie sieht die Arbeit aus ?!

20
GPH

Das würde nur passieren, wenn PostCode ein Leerzeichen fehlt. Sie können eine Bedingung hinzufügen, sodass PostCode vollständig abgerufen wird, falls ein Leerzeichen nicht wie folgt gefunden wird

select SUBSTRING(PostCode, 1 ,
case when  CHARINDEX(' ', PostCode ) = 0 then LEN(PostCode) 
else CHARINDEX(' ', PostCode) -1 end)
30
iruvar

CHARINDEX gibt 0 zurück, wenn die Zeichenfolge keine Leerzeichen enthält, und Sie suchen nach einer Teilzeichenfolge mit der Länge -1.

Sie können ein Leerzeichen am Ende der Zeichenfolge anheften, um sicherzustellen, dass immer mindestens ein Leerzeichen vorhanden ist, und dieses Problem vermeiden.

SELECT SUBSTRING(PostCode, 1 , CHARINDEX(' ', PostCode + ' ' ) -1)
16
Martin Smith

Dies liegt daran, dass CHARINDEX-1 einen -iven Wert zurückgibt, wenn die Suche nach "" (Leerzeichen) 0 ist. Die einfachste Lösung wäre, '- ve zu vermeiden = 'durch Hinzufügen

ABS(CHARINDEX(' ', PostCode ) -1))

das gibt nur + ive Werte für Ihre Länge zurück, auch wenn CHARINDEX(' ', PostCode ) -1) ein -ve Wert ist. Korrigiere mich, wenn ich falsch liege!

7
ajufsd