TSQL - 替换符号前的字符串

TSQL - Replace string before symbol

我有一个 table 存储 sql 服务器上文件的路径。我需要替换最后一个反斜杠之前的路径:

C:\Users\APP\AppData\Local\Temp\test\abc deg.pdf

例如:

\app\pp\abc deg.pdf

编辑:table 包含许多路径 - 我需要 运行 遍历整个 table 并更改所有路径。

这是可以做到的。

UPDATE TABLE
SET PATH = REPLACE(PATH, 'C:\Users\APP\AppData\Local\Temp\test', '\app\pp')
WHERE ...

这会将 'C:\Users\APP\AppData\Local\Temp\test' 替换为 '\app\pp'。或者您可以根据需要修改路径。

请在执行此 UPDATE 语句之前进行测试。我没有在这里指定过滤器

  1. 反转输入字符串(使用REVERSE) and find the index of the first backslash (using CHARINDEX)。
  2. 将左侧部分取到该索引(使用 LEFT)并与替换字符串的反向连接(使用 + 运算符)。
  3. 然后将其反转以获得最终结果。

您可以使用:

CHARINDEX('\', REVERSE(@str))

获取第一个反斜杠的索引从末尾开始

RIGHT 与此索引一起使用,您可以提取最后一个反斜杠后的字符串并将其连接到新路径:

DECLARE @str VARCHAR(50) = 'C:\Users\APP\AppData\Local\Temp\test\abc deg.pdf'

SELECT  '\app\pp' + RIGHT(@str, CHARINDEX('\', REVERSE(@str)))

试试这个:

declare @a varchar(max)='C:\Users\APP\AppData\Local\Temp\test\abc deg.pdf'
select REPLACE(@a,SUBSTRING(@a,1,(LEN(@a)-charindex('\',reverse(@a),1))),'\app\pp')

更新: 用于更新所有 table 列值。

select REPLACE([column-name],SUBSTRING([column-name],1,(LEN([column-name])-charindex('\',reverse([column-name]),1))),'\app\pp')
FROM [Your-table]