【问题标题】:How to replace a string in a SQL Server Table Column如何替换 SQL Server 表列中的字符串
【发布时间】:2010-10-23 07:23:23
【问题描述】:

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

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

如何使用简单的update 做到这一点?

【问题讨论】:

    标签: sql sql-server database database-administration


    【解决方案1】:

    就这么简单:

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

    【讨论】:

    • 如果有很多数据,我通常会添加where path like '%oldstring%'
    • where 条件有意义,因为如果我在表中有 50 行并且如果我用替换函数替换 10 行,它会影响所有 50 行,即使如果你没有 where 条件它会替换 10 行。但是,如果您有上面评论中提到的 where 条件,它只会影响 10 行。
    【解决方案2】:
    UPDATE [table]
    SET [column] = REPLACE([column], '/foo/', '/bar/')
    

    【讨论】:

    • 抱歉,十年后不要吹毛求疵,但从答案中不清楚是foo 被替换还是bar(再次抱歉)
    【解决方案3】:

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

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

    【讨论】:

    • 这完全违背了使用replace方法的目的。你可以像这样完成同样的事情:update table set path='newstring' where path='oldstring';
    • 也许你的意思是where path like '%oldstring%'
    【解决方案4】:
    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 的参数数据类型无效。

    【讨论】:

      【解决方案5】:

      你可以使用这个查询

      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,但在执行替换功能后将是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
        

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

        【讨论】:

          【解决方案7】:
          select replace(ImagePath, '~/', '../') as NewImagePath from tblMyTable 
          

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

          【讨论】:

            【解决方案8】:

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

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

            【讨论】:

              【解决方案9】:

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

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

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

              希望它会起作用。

              【讨论】:

                【解决方案10】:

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

                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
                

                【讨论】:

                  猜你喜欢
                  • 2015-10-13
                  • 1970-01-01
                  • 2014-01-26
                  • 2022-01-02
                  • 2014-07-27
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-03-25
                  • 1970-01-01
                  相关资源
                  最近更新 更多