2017-11-15 1 views
0

Ich habe folgende Zeichenkette Befehl:SubString über verschiedene Saitenlängen

RTRIM(LTRIM(SUBSTRING(FileName, CHARINDEX('-', FileName, 0)+1, CHARINDEX('-', FileName, 0)-7))) 

und haben Dateipfade wie der unten:

"C:\James\AAA(9) - V0001514 MR J BLOGGS.pdf" returns "V0001514" 
"C:\James\test(100) - V0001585 MRS A SMITH.pdf returns "V0001585 MR" 

Der erste liefert das richtige Ergebnis, aber die zweite kehrt zusätzlichen Figuren. Sieht jemand eine Möglichkeit, sicherzustellen, dass die V * -Nummer immer korrekt zurückgegeben wird?

Antwort

2

Das Problem ist Sie Ihre Datenlänge von -7

Sie könnten versuchen, festgelegt haben:

SELECT SUBSTRING (@DATA, CHARINDEX('-', @DATA)+1, 
      CHARINDEX(' ', LTRIM(SUBSTRING(@DATA, CHARINDEX('-', @DATA)+1, LEN(@DATA))))) 

Ergebnis:

"C:\James\AAA(9) - V0001514 MR J BLOGGS.pdf" returns "V0001514" 
"C:\James\test(100) - V0001585 MRS A SMITH.pdf returns "V0001585" 
+0

Danke, das scheint mir das beste Ergebnis, das Format basiert weg zu geben. – Philip

0

Probieren Sie folgendes hoffen, dass es Ihnen hilft:

DECLARE @FileName VARCHAR(100)='C:\James\AAA(9) - V0001514 MR J BLOGGS.pdf' 
SELECT @FileName=SUBSTRING(@FileName,CHARINDEX('-',@FileName)+2,LEN(@FileName)-CHARINDEX('-',@FileName)) 
SELECT LEFT(@FileName,CHARINDEX(' ',@FileName)-1) 
2

Sie können verwenden diese Formel.

RTRIM(LTRIM(SUBSTRING(FileName, CHARINDEX('-', FileName, 0)+1, 7))) 

Probe:

DECLARE @FileName1 VARCHAR(255) = 'C:\James\AAA(9) - V0001514 MR J BLOGGS.pdf" returns "V0001514' 

DECLARE @FileName2 VARCHAR(255) = 'C:\James\test(100) - V0001585 MRS A SMITH.pdf returns "V0001585 MR' 


SELECT 
RTRIM(LTRIM(SUBSTRING(@FileName1, CHARINDEX('-', @FileName1, 0)+1, 7))) F1, 
RTRIM(LTRIM(SUBSTRING(@FileName2, CHARINDEX('-', @FileName2, 0)+1, 7))) F2 

Ergebnis:

F1  F2 
------- ------- 
V00015 V00015