2011-11-30 56 views
0

所以我想从包含一堆文件夹路径的表中找到一个子字符串。我试图获取存在于“C:\ Root \ IWantThisString \ otherstuff”之间的子字符串。像SUBSTRING(FilePath,9,CHARINDEX('\',FilePath,9) - 9)这样做的问题是,当我有一个类似于“C:\ Root \ IWantThisString”的路径时,它会返回一个错误,因为charindex在“Root \”之后永远不会找到最后一个'\'在这种情况下没有第三个'\')。SQL子字符串使用charindex - somelength或字符串长度 - somelength

那么有没有简单的方法来做这样的事情?

SELECT SUBSTRING(FilePath,9,(
    IF (CHARINDEX('\',FilePath,9) = 0) 
    BEGIN 
     LEN(FilePath) 
    ELSE 
     CHARINDEX('\',FilePath,9) - 9 
    END)) 
FROM Table 

或者类似的东西?

回答

2

哈!我发现了一个可笑的简单答案,我可以在每个字符串的末尾添加一个反斜杠。它完美的工作!

SELECT SUBSTRING(FilePath,9,(CHARINDEX('\',FilePath + '\',9) - 9))