替换字符串的最后一部分

时间:2017-01-26 13:48:04

标签: sql-server tsql

我有几个这样的路径名:

some\cool\path\1\d32a
some\cool\path\2\x3rydf
some\cool\path\3\y42d
some\cool\path\4\qasdf3
some\cool\path\5\jv5

我想用路径中的\newPath替换路径的最后一部分,路径中包含1,2或3(不是4或5)。预期结果将是:

some\cool\path\1\newPath
some\cool\path\2\newPath
some\cool\path\3\newPath
some\cool\path\4\qasdf3
some\cool\path\5\jv5

我可以这样做:

UPDATE mytable
SET Viewsmap = [method I'm looking for]
WHERE PathName like '%1%'
OR PathName like '%2%'
OR PathName like '%3%'

但是我不知道如何更改每个字符串的最后部分,因为它不知道路径的最后部分是什么,Replace函数似乎不是接受通配符。

2 个答案:

答案 0 :(得分:1)

您可以使用:

LEFT (Viewsmap, LEN(Viewsmap) - CHARINDEX('\', REVERSE(Viewsmap)) + 1 )

以提取\最后一次出现之前的部分。

然后您可以轻松UPDATE使用:

UPDATE mytable
SET Viewsmap = CONCAT(LEFT(Viewsmap, LEN(Viewsmap) - CHARINDEX('\', REVERSE(Viewsmap)) + 1 ),
                      'newPath')
WHERE PathName like '%1%'
      OR PathName like '%2%'
      OR PathName like '%3%'

答案 1 :(得分:1)

我认为你可以像这样使用PATINDEX

select 
    case when patindex('%\[123]\%',p) > 0 then 
        substring(p,1,PATINDEX('%\[123]\%',p) + 2) + 'newpath' 
    else p 
    end newP
from t;

在你的UPDATE命令中:

update mytable
set Viewsmap = substring(PathName, 1, PATINDEX('%\[123]\%',PathName) + 2) + 'newpath'
where patindex('%\[123]\%', PathName) > 0;