【问题标题】:UPDATE and REPLACE part of a string更新和替换字符串的一部分
【发布时间】:2013-06-26 06:10:40
【问题描述】:

我有一个包含两列的表格,IDValue。我想更改第二列中某些字符串的一部分。

表格示例:

ID            Value
---------------------------------
1             c:\temp\123\abc\111
2             c:\temp\123\abc\222
3             c:\temp\123\abc\333
4             c:\temp\123\abc\444

现在不需要Value 字符串中的123\。我试过UPDATEREPLACE

UPDATE dbo.xxx
SET Value = REPLACE(Value, '%123%', '')
WHERE ID <= 4

当我执行脚本时,SQL Server 不会报告错误,但它也不会更新任何内容。这是为什么呢?

【问题讨论】:

  • 它不会替换任何东西,因为通配符不被视为通配符,而是被视为文字。

标签: sql sql-server string sql-server-2008 replace


【解决方案1】:

REPLACE 中不需要通配符 - 它只会找到您为第二个参数输入的字符串,因此以下应该可以工作:

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123', '')
WHERE ID <=4

如果要替换的列是 textntext,则需要将其强制转换为 nvarchar

UPDATE dbo.xxx
SET Value = REPLACE(CAST(Value as nVarchar(4000)), '123', '')
WHERE ID <=4

【讨论】:

  • 它可以工作,但不适用于 ntext 类型 :( ...>> Msg 8116, Level 16, State 1, Line 21 - 参数数据类型 ntext 对于替换函数的参数 1 无效。
  • 我刚刚找到了解决方案 :) ===> stackoverflow.com/questions/4341613/…
  • 等等,`? isn't that escaping the '` 字符是怎么回事?
  • 这很有帮助
  • 如果您的 Column 类型是 Text 或 NText,这将不起作用,请参阅此答案 stackoverflow.com/questions/4341613/…
【解决方案2】:

替换波斯语

UPDATE dbo.TblNews
SET keyWords = REPLACE(keyWords, '-', N'،')

帮助: dbo.TblNews -- 表名

keyWords -- 字段名

【讨论】:

    【解决方案3】:

    对于任何想要替换您的脚本的人。

    update dbo.[TABLE_NAME] set COLUMN_NAME= replace(COLUMN_NAME, 'old_value', 'new_value') where COLUMN_NAME like %CONDITION%

    【讨论】:

    • 来自审核队列:我可以请求您在源代码周围添加一些上下文。仅代码的答案很难理解。如果您可以在帖子中添加更多信息,这将对提问者和未来的读者都有帮助。
    • @RBT 这就是为什么 reddit 有关于 SO 的疯狂模因
    【解决方案4】:

    查询:

    UPDATE tablename 
    SET field_name = REPLACE(field_name , 'oldstring', 'newstring') 
    WHERE field_name LIKE ('oldstring%');
    

    【讨论】:

      【解决方案5】:

      你应该使用下面的更新查询

      UPDATE dbo.xxx SET Value=REPLACE(Value,'123\','') WHERE Id IN(1, 2, 3, 4)
      
      UPDATE dbo.xxx SET Value=REPLACE(Value,'123\','') WHERE Id <= 4
      

      上述任何一个查询都应该有效。

      【讨论】:

        【解决方案6】:

        要使查询在不需要更新每一行的大表中更快运行,您还可以选择仅更新将要修改的行:

        UPDATE dbo.xxx
        SET Value = REPLACE(Value, '123', '')
        WHERE ID <= 4
        AND Value LIKE '%123%'
        

        【讨论】:

          【解决方案7】:
          CREATE TABLE tbl_PersonalDetail
          (ID INT IDENTITY ,[Date] nvarchar(20), Name nvarchar(20), GenderID int);
          
          INSERT INTO Tbl_PersonalDetail VALUES(N'18-4-2015', N'Monay', 2),
                                               (N'31-3-2015', N'Monay', 2),
                                               (N'28-12-2015', N'Monay', 2),
                                               (N'19-4-2015', N'Monay', 2)
          
          DECLARE @Date Nvarchar(200)
          
          SET @Date = (SELECT [Date] FROM Tbl_PersonalDetail WHERE ID = 2)
          
          Update Tbl_PersonalDetail SET [Date] = (REPLACE(@Date , '-','/')) WHERE ID = 2 
          

          【讨论】:

          • 请说明您的答案是如何解决问题的,它将帮助大家更清楚地理解您的解决方案,以供将来参考。
          【解决方案8】:

          您有一张表,其中包含七个字符的日期代码

          "32-1000"
          

          现在你要全部替换

          "32-"
          

          "14-"
          

          您必须运行的 SQL 查询是

          Update Products Set Code = replace(Code, '32-', '14-') Where ...(Put your where statement in here)
          

          【讨论】:

            【解决方案9】:

            尝试删除% 字符如下

            UPDATE dbo.xxx
            SET Value = REPLACE(Value, '123', '')
            WHERE ID <=4
            

            【讨论】:

              猜你喜欢
              • 2012-04-27
              • 2015-09-18
              • 2022-07-18
              • 2021-11-15
              • 1970-01-01
              • 2012-05-18
              • 2017-09-19
              • 1970-01-01
              相关资源
              最近更新 更多