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


364

我有一个SQL Sever引用路径(UNC或其他方式)的表(),但是现在路径将更改。

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

我该如何简单update

Answers:


604

这很简单:

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

43
where path like '%oldstring%'如果有大量数据,我通常会添加。
Derek Tomes,2015年

1
where条件有意义,因为如果表中有50行并且如果我用replace函数替换10行,那么即使没有条件,它也会替换10行,这会影响所有50行。但是,如果您有上述注释中提到的条件,它将仅影响10行。
iMalek

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

抱歉,十年后不要挑剔,但是从答复中还不清楚foo是被替换还是bar (很抱歉)
Alex

28

我尝试了上面的方法,但没有得到正确的结果。以下是一项:

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

11
这完全违背了使用replace方法的目的。您可以像这样完成相同的操作:更新表set path ='newstring'其中path ='oldstring';
2013年

11
也许你的意思是where path like '%oldstring%'
v010dya

17
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对于函数的参数1无效replace



8

所有的答案都很好,但我只想给你一个很好的例子

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

希望这能给您更好的可视化


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'

2

您需要借助替换功能来替换路径。

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

这里column_name是指您要更改的列。

希望它能工作。


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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.