【问题标题】:SQL update for the varchar columnvarchar 列的 SQL 更新
【发布时间】:2016-10-01 07:27:58
【问题描述】:

我想将AttachmentCopyLoc 列的字符串从D:\IT\Public\FTX_RobotAlerts\336 更改为V:\IT\Public\FTX_RobotAlerts\336 仅将D 更改为V,其余字符串相同(我不想更改它)。

我该怎么做?

提前感谢您的帮助。

【问题讨论】:

  • 我有 12k 行要更新。如果您有任何问题,请告诉我。
  • 您使用的是什么服务器软件?字符串替换函数在不同平台上可能不同。
  • 您能否添加一个带有特定 RDBMS 引擎和语法的标签?有这么多。
  • 我使用的是 SQL Server 2005

标签: sql sql-server-2005 sql-update


【解决方案1】:

确切的语法取决于平台,但它类似于

UPDATE {table}
SET AttachmentCopyLoc = REPLACE ( AttachmentCopyLoc , 'D:' , 'V:' )  
WHERE AttachmentCopyLoc LIKE 'D:%'

【讨论】:

  • @D Stanley .. 感谢您的帮助,但不知怎的,它给了我类似“消息 207,第 16 级,状态 1,第 3 行无效的列名 'D:'”之类的错误。 ,不知道为什么...但是 Cableload 的下一个答案对我有用..
  • 查看我的更新 - 我使用了错误的报价标识符
【解决方案2】:

在 SQL Server 中,我建议使用 stuff():

update t
    set AttachmentCopyLoc = stuff(AttachmentCopyLoc, 1, 1, 'V')
    where AttachmentCopyLoc like 'D:%';

这个版本有两个优点:

  1. 使用STUFF() 可确保仅替换第一次出现的'D:'。诚然,该子字符串不太可能在列中出现多次,但为什么要冒险呢?
  2. LIKE 的使用允许使用AttachmentCopyLoc 上的索引,前提是该索引可用并且使用 hte 索引是合适的。

【讨论】:

    【解决方案3】:

    另一种方法是基本的字符串操作

    UPDATE {table}
    SET AttachmentCopyLoc ='V' + substring(AttachmentCopyLoc,2,len(AttachmentCopyLoc )) 
    where AttachmentCopyLoc like 'D%'
    

    【讨论】:

      【解决方案4】:

      这只会改变字符串的第一个字母:

      update <tablename>
      set AttachmentCopyLoc = 'V'+substring(AttachmentCopyLoc,2,len(AttachmentCopyLoc)-1)
      

      【讨论】:

        猜你喜欢
        • 2012-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-17
        • 1970-01-01
        • 1970-01-01
        • 2020-10-01
        • 1970-01-01
        相关资源
        最近更新 更多