如何在SQL Server表列中替换字符串

402

我有一张表(SQL Server),其中引用了路径(UNC或其他),但现在路径将要更改。

在路径列中,我有许多记录,我只需要更改路径的一部分,而不是整个路径。并且我需要在每个记录中将相同的字符串更改为新字符串。

如何使用简单的update来实现这一点?

10个回答

677

如此简单:

update my_table
set path = replace(path, 'oldstring', 'newstring')

52
如果数据量很大,我通常会添加where path like '%oldstring%' - Derek Tomes
2
有条件的情况下才有意义,因为如果表中有50行数据,而使用替换函数替换其中的10行数据,即使没有where条件,也会影响所有50行数据。但是,如果像上面的评论中所提到的那样加上where条件,它只会影响这10行数据。 - iMalek

148
UPDATE [table]
SET [column] = REPLACE([column], '/foo/', '/bar/')

7
抱歉,十年后再挑刺可能有点小题大作,但从回答中不清楚 foo 是被替换还是 bar - Alex from Jitbit

30

我尝试了上面的方法但没有得到正确的结果,下面这个可以:

update table
set path = replace(path, 'oldstring', 'newstring') where path = 'oldstring'

12
这完全违背了使用替换方法的初衷。你可以通过这种方式完成相同的事情: 更新表,将路径为“oldstring”的记录的路径更新为“newstring”。 - Ian
15
也许你的意思是where path like '%oldstring%' - v010dya

18
UPDATE CustomReports_Ta
SET vchFilter = REPLACE(CAST(vchFilter AS nvarchar(max)), '\\Ingl-report\Templates', 'C:\Customer_Templates')
where CAST(vchFilter AS nvarchar(max)) LIKE '%\\Ingl-report\Templates%'

没有使用CAST函数,我遇到了一个错误。

参数数据类型ntext对于replace函数的参数1来说是无效的。


13

你可以使用这个查询

update table_name set column_name = replace (column_name , 'oldstring' ,'newstring') where column_name like 'oldstring%'

11

所有回答都很好,但我只是想给你举个好例子。

select replace('this value from table', 'table',  'table but updated')

这个SQL语句将使用第三个参数替换给定语句(第一个参数)中存在的单词"table"(第二个参数)。

初始值为this value from table,但执行替换函数后,它将变为this value from table but updated

以下是一个实际例子:

UPDATE publication
SET doi = replace(doi, '10.7440/perifrasis', '10.25025/perifrasis')
WHERE doi like '10.7440/perifrasis%'

例如,如果我们有这个值

10.7440/perifrasis.2010.1.issue-1

它将变成

10.25025/perifrasis.2010.1.issue-1

希望这能让您更好地想象


7
您需要使用replace函数替换路径。
update table_name set column_name = replace(column_name, 'oldstring', 'newstring')

这里的column_name是指你想要修改的列。

希望这能起作用。


6
select replace(ImagePath, '~/', '../') as NewImagePath from tblMyTable 

"ImagePath" 是我的列名。
"NewImagePath" 是代替 "ImagePath" 的临时列名。
"~/"是当前字符串(旧字符串)。
"../"是需要的字符串(新字符串)。
"tblMyTable" 是我数据库中的表名。


4

如果目标列类型不是varchar/nvarchar,比如text,我们需要将列值转换为字符串然后再进行转换:

update URL_TABLE
set Parameters = REPLACE ( cast(Parameters as varchar(max)), 'india', 'bharat')
where URL_ID='150721_013359670'

0

您还可以在运行时替换电子邮件模板中的大文本,这里有一个简单的示例。

DECLARE @xml NVARCHAR(MAX)
SET @xml = CAST((SELECT [column] AS 'td','',        
        ,[StartDate] AS 'td'
         FROM [table] 
         FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX))
select REPLACE((EmailTemplate), '[@xml]', @xml) as Newtemplate 
FROM [dbo].[template] where id = 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接