2009-05-02 58 views
300

我有一个引用路径(UNC或其他)的表(SQL Sever),但现在路径将发生更改。在路径列中,我有很多记录,我需要更改路径的一部分,但不是整个路径。我需要将每个记录中的相同字符串更改为新字符串。如何替换SQL Server表中的字符串列

我该如何做一个简单的更新?

回答

483

正是这种简单:

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

如果有很多数据,我通常会添加`像'%oldstring%'这样的路径。 – 2015-11-02 20:48:44

+0

这里的条件是有意义的,因为如果我在表中有50行,并且如果我用替换函数替换10行,它会影响所有50行,即使它取代了10行(如果您没有条件)。但是如果你有上述评论中提到的条件,它只会影响10行。 – 2017-10-02 18:52:30

108
UPDATE [table] 
SET [column] = REPLACE([column], '/foo/', '/bar/') 
+8

魅力!像一辆拥有百万加仑汽油和开放高速公路的古老rustik自行车! – Skynet 2014-09-24 11:39:25

24

我试过以上,但它并没有得到正确的结果。下面的人做:

update table 
set path = replace(path, 'oldstring', 'newstring') where path = 'oldstring' 
15
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功能我得到一个错误

参数的数据类型ntextreplace函数的参数1无效。

3

如果目标列类型不是为varchar/nvarchar的其他类似文本,我们需要转换的列值的字符串,然后将其转换为:

update URL_TABLE 
set Parameters = REPLACE (cast(Parameters as varchar(max)), 'india', 'bharat') 
where URL_ID='150721_013359670' 
3
select replace(ImagePath, '~/', '../') as NewImagePath from tblMyTable 

其中“的ImagePath”是我的专栏名称。
“NewImagePath” 是temporery 列名insted的的 “ImagePath的”
“〜/” 是我当前字符串。(老 字符串)
“../” 是我requried字符串。(新字符串)
“tblMyTable” 被我的表在数据库中。

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 
4

您可以使用此查询

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

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

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

这个SQL语句将替换词的存在使用第三个参数

在给定语句(第一个参数)内的“表” (第二个参数)

初值为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 

希望这给你更好的可视化