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

时间:2009-05-02 09:43:53

标签: sql sql-server database database-administration

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

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

如何使用简单的update

执行此操作

10 个答案:

答案 0 :(得分:568)

这很简单:

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

答案 1 :(得分:126)

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

答案 2 :(得分:25)

我尝试了上述但没有产生正确的结果。以下是:

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

答案 3 :(得分: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功能,我收到了错误

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

答案 4 :(得分:10)

您可以使用此查询

1

答案 5 :(得分:7)

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

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 :(得分:6)

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

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

答案 7 :(得分:4)

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

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

答案 8 :(得分:2)

您需要借助replace函数来替换路径。

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

此处column_name是指您要更改的列。

希望它会起作用。

答案 9 :(得分: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