2016-04-25 7 views
0

Ich versuche, den letzten Dateinamen aus einem Feld in SQL zu extrahieren, wobei das Trennzeichen / ist, und es gibt auch eins nach dem letzter Dateiname (Ich bin mit diesem einem neuen in einem BI-Web-Intelligence-Dokument abgelegt zu erstellen.)Extrahieren des letzten Dateinamens aus einem Feld, wo die Anzahl der Ordner und die Länge der Dateinamen variabel ist

Filename1/filename2/filename3/filename4/ Ergebnis erforderlich Filename4

File1/file2/file3/file4/file5/file6 Ergebnis file6 erforderlich

ich verschiedene Kombinationen ausprobiert, aber ohne Erfolg. Wie Sie sehen können, haben die Dateinamen keine Standardlänge und die Anzahl der Ordner ist variabel.

Jede Hilfe zu diesem würde wirklich geschätzt werden.

Danke

Lyn

+0

Markieren Sie die verwendeten DBMS. (Die Antwort wird wahrscheinlich produktspezifisch sein!) – jarlh

+1

Die beiden Beispiele ... einer hat "/" am Ende und der andere nicht? Können Sie am Ende "/" garantieren oder nicht? –

+0

Im Allgemeinen .... die Zeichenfolge umkehren und dann die erste erhalten. Die meisten Datenbanken haben eine Art umgekehrte Funktion. –

Antwort

0

Je nach Antwort auf meinen Kommentar ... haben Sie eine Eingabezeichenfolge, die mit „/“ oder nicht endet? Ich habe beide Arten von Testzeichenfolgen in diese Abfrage mit SQL 2008 als dbms. Kommentieren Sie entweder Set @tstString, um jede Bedingung auszuführen, und Sie sehen die beiden Ergebnismöglichkeiten.

Declare @tmpFirstMark int 
Declare @tmpLastMark int 
Declare @tmpUseMark int 

Declare @tstString varchar(100) 
Set @tstString = 'Filename1/filename2/filename2/filename4/' 
Set @tstString = 'File1/file2/file3/file4/file5/file6' 

-- Calculate 1st Occurrence of "/" 
Set @tmpFirstMark = PATINDEX('%/%',@tstString) 
-- Calculate last Occurrence of "/" 
Set @tmpLastMark = (LEN(@tstString) - PATINDEX('%/%',REVERSE(@tstString)) + 1) 
-- Calculate 2nd to last Occurrence of "/" 
Set @tmpUseMark = @tmpLastMark - PATINDEX('%/%', REVERSE(SUBSTRING(@tstString, 1, @tmpLastMark-1))) 

Select 
    @tstString 
    ,@tmpFirstMark 
    ,@tmpLastMark 
    ,@tmpUseMark 

    ,SUBSTRING(@tstString, @tmpLastMark + 1, LEN(@tstString)) as 'resultSTR' 
    ,SUBSTRING(@tstString, @tmpUseMark + 1, @[email protected]) as 'otherResult' 
0

würde ich einen regulären Ausdruck verwenden, um die gewünschte Ausgabe zu erhalten:

([^/]+)/?$ 

Dies wird so viele nicht-/ Zeichen wie möglich (mindestens 1) vor dem Ende der Zeichenfolge übereinstimmt, dass kann eine optionale / folgen.
Sie möchten die erste Gruppe der Übereinstimmung verwenden, um den Dateinamen eines Verzeichnisses ohne seine nachfolgende / abzurufen.

Sie haben Ihr RDBMS nicht angegeben und ich bin nicht so komfortabel mit der Verwendung von Regexps in SQL, so hoffe ich, dass Sie in der Lage sein werden, das in Ihrem SQL-Dialekt zusammenzusetzen.

Verwandte Themen