2016-04-25 66 views
0

我想從SQL中的字段中提取最後一個文件名,其中分隔符是/,並且還有一個最後的文件名。 (我用它來創建一個新的商務智能Web Intelligence文檔中提出。)從文件夾數量和文件名稱長度可變的字段中提取最後一個文件名

Filename1/filename2/filename3/filename4/結果所需Filename4

File1/file2/file3/file4/file5/file6結果所需file6

我曾嘗試各種組合,但沒有成功。正如你所看到的文件名不是一個標準的長度和文件夾的數量是可變的。

任何幫助,這將真正讚賞。

謝謝

林恩

+0

標記使用的dbms。 (答案可能是特定產品!) – jarlh

+1

這兩個例子......一個最後有「/」,另一個沒有?你能否保證「/」結束? –

+0

一般來說....反轉字符串,然後得到第一個。大多數數據庫都有某種反轉功能。 –

回答

0

根據您的回答我的意見......你有以「/」或沒有結束的輸入字符串?我已經將這兩種類型的測試字符串放在此查詢中,並使用SQL 2008作爲dbms。只是註釋掉Set @tstString來運行每個條件,你會看到兩個結果的可能性。

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

我會使用正則表達式來檢索所需的輸出:所述字符串的末尾之前

([^/]+)/?$ 

這將盡可能多的非/字符地匹配(至少1),即可以跟隨一個可選的/
您將希望使用第一組匹配來檢索目錄的文件名,而不是尾隨/

您還沒有指定您的RDBMS,而且我在SQL中使用正則表達式時不太舒適,因此我希望您能夠將它們拼湊在一起,形成SQL方言。

相關問題