DECLARE @x TABLE(y VARCHAR(64))
INSERT @x SELECT 'E:/My_Users//kpa1/eOReport - VSD.mrk'
UNION ALL SELECT 'E:/My_Users//krishr9/Report.mrk'
UNION ALL SELECT 'E:/My_Users//kristc/AllPAS.mrk'
UNION ALL SELECT 'E:/My_Users//kukerm/v1.mrk'
UNION ALL SELECT 'E:/My_Users//ksnedike/abcdef.mrk';
SELECT y, part = SUBSTRING(y, 2, CHARINDEX('/', y, 2)-2)
FROM (SELECT y = SUBSTRING(y, CHARINDEX('//', y) + 1, 64) FROM @x) AS z;
結果:
y part
------------------------ ----------
/kpa1/eOReport - VSD.mrk kpa1
/krishr9/Report.mrk krishr9
/kristc/AllPAS.mrk kristc
/kukerm/v1.mrk kukerm
/ksnedike/abcdef.mrk ksnedike
您還可能遇到在沒有拖尾後續/
字符的情況下,例如'E:/foo//bar'
- 如果這樣的話:
SELECT y, part = SUBSTRING(y, 2, COALESCE(NULLIF(CHARINDEX('/', y, 2),0),66)-2)
FROM (SELECT y = SUBSTRING(y, CHARINDEX('//', y) + 1, 64) FROM @x) AS z;
嗨亞倫,泰您的帖子。它確實有效。我的列中有2000+個值,名爲txt_Full_Path。編寫UNION ALL SELECT將很乏味。有沒有更簡單的方法來查詢我的專欄瓦特/ o使用表變量? TIA。 – Nemo 2012-07-09 18:27:26
@Nemo,那只是設置示例數據來演示給出您在問題中列出的值的輸出。你當然會接受這個查詢,用實際的表名和'y'替換實際的列名。 – 2012-07-09 18:29:12