387

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

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

我怎么能用简单的方法做到这一点update

4

10 回答 10

647

这很容易:

update my_table
set path = replace(path, 'oldstring', 'newstring')
于 2009-05-02T09:45:49.977 回答
138
UPDATE [table]
SET [column] = REPLACE([column], '/foo/', '/bar/')
于 2009-05-02T09:47:07.400 回答
28

I tried the above but it did not yield the correct result. The following one does:

update table
set path = replace(path, 'oldstring', 'newstring') where path = 'oldstring'
于 2012-03-01T23:26:33.320 回答
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

于 2012-12-09T14:25:54.473 回答
11

您可以使用此查询

update table_name set column_name = replace (column_name , 'oldstring' ,'newstring') where column_name like 'oldstring%'
于 2017-04-27T10:10:45.777 回答
9

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

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

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

于 2017-07-24T16:01:20.853 回答
6
select replace(ImagePath, '~/', '../') as NewImagePath from tblMyTable 

其中“ImagePath”是我的列名。
“NewImagePath”是“ImagePath”的临时列名称
“~/”是我当前的字符串。(旧字符串)
“../”是我需要的字符串。(新字符串)
“tblMyTable”是我在数据库中的表。

于 2016-03-30T14:53:48.047 回答
4

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

update URL_TABLE
set Parameters = REPLACE ( cast(Parameters as varchar(max)), 'india', 'bharat')
where URL_ID='150721_013359670'
于 2015-07-21T14:09:30.900 回答
2

您需要在替换功能的帮助下替换路径。

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

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

希望它会奏效。

于 2019-05-10T13:30:54.170 回答
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
于 2017-03-29T04:32:54.137 回答