【问题标题】:Update substring of a column更新列的子字符串
【发布时间】:2013-09-05 10:18:49
【问题描述】:

我在 SQL Server 2008 数据库中有一个名为 Meter 的表。此表有一个名为Name 的列。

Name 列中的每个条目都具有以下 ZAA\ 的前缀。我想将此前缀更改为ZAA_,而不影响列中的其余文本。

【问题讨论】:

    标签: sql database sql-server-2008 tsql where


    【解决方案1】:
    UPDATE Meter
    SET Name = 'ZAA_' + SUBSTRING(Name, 4, LEN(Name))
    WHERE SUBSTRING(Name, 1, 4) = 'ZAA\'
    

    编辑:

    或者正如@Damien_The_Unbliever 所说,使用索引:

    UPDATE Meter
    SET Name = 'ZAA_' + SUBSTRING(Name, 4, LEN(Name))
    WHERE Name LIKE 'ZAA\%'
    

    编辑

    根据您的评论,尝试使用此语句修复额外的\

    UPDATE Meter
    SET Name = 'ZAA_' + SUBSTRING(Name, 5, LEN(Name))
    WHERE Name LIKE 'ZAA_\%'
    

    【讨论】:

    • Name LIKE 'ZAA\%' 至少允许索引(如果存在)查找要更新的行。
    • @Damien_The_Unbeliever - 已添加。谢谢。
    • 没有真正按预期工作。现在的结果是:ZAA_\。我只想显示 ZAA_。谢谢
    • 非常感谢您的帮助。工作了一个享受
    • 这对我有用。对于MySQL的变化,LEN改为LENGTHSUBSTRING的第二个参数是起始偏移量,所以应该比要剥离的字符数多1。所以,要删除 4 个字符,这个值就是 5。
    【解决方案2】:

    Here is the SQLFiddel Demo

    以下是您可以尝试的查询

    CREATE TABLE Meter
        ([Name] varchar(7))
    ;
    
    INSERT INTO Meter
        ([Name])
    VALUES
        ('ZAA\001')
    ;
    
    
    select * from Meter;
    
    Update Meter
       set Name = stuff(Name,4,1,'_')
     Where SUBSTRING(Name, 1,4) ='ZAA' + Char(92);
    
    select * from Meter;
    

    【讨论】:

      【解决方案3】:

      MYSQL:

      UPDATE Meter
      SET Name = CONCAT('ZAA' ,'_', SUBSTRING(Name, 4, LENGTH(Name)))
      WHERE Name LIKE 'ZAA\%'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-24
        • 2019-09-18
        • 2015-09-09
        • 1970-01-01
        • 2020-11-21
        • 1970-01-01
        相关资源
        最近更新 更多