首页 文章

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

提问于
浏览
327

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

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

我怎么能用一个简单的 update 做到这一点?

9 回答

  • 0

    就这么简单:

    update my_table
    set path = replace(path, 'oldstring', 'newstring')
    
  • 533
    UPDATE [table]
    SET [column] = REPLACE([column], '/foo/', '/bar/')
    
  • 15

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

    update table
    set path = replace(path, 'oldstring', 'newstring') where path = 'oldstring'
    
  • 23
    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无效 .

  • 117

    您可以使用此查询

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

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

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

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

    初始值是 this value from table 但是在执行replace函数后它将是 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
    

    希望这能为您提供更好的可视化

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

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

  • 6

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

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

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

    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
    

相关问题