【问题标题】:MySQL - Remove substring from an entryMySQL - 从条目中删除子字符串
【发布时间】:2013-06-19 02:05:02
【问题描述】:

我的“位置”表包含 6 列。 (ID、姓名、别名、区域、X、Y)

“名称”列中的一些条目示例:

Blackwood Highschool, Paris, France

Hilltop Market, Barcelona, Spain

Roundwell Plaza, Melbourne, Australia

Rurk Mount, Moscow, Russia(mountain)

History Museum, Prague, Czech Republic

Narrow River (river), Bombay, India

一些条目在名称中包含“(mountain)”、“(river)”或“(...)”(8 个不同的)。我不知道为什么要以这种方式创建表。它应该有一个额外的列来存储这些数据,但是很好。

我只想从位置名称中删除“(...)”子字符串。我不知道该怎么做,它是这样的,所以你有一个想法:

DELETE FROM 'Location' 
WHERE 'Name'
LIKE '%(%)%';

我知道这会删除整行,但我只想从“名称”字符串中删除 (%) 项。

【问题讨论】:

    标签: mysql sql substring sql-like


    【解决方案1】:

    如果您只有 8 个变体,而且这是一次性的,您可以通过替换来完成。

    update location
      set name = replace(name , '(river)','')
      where name like '%(river)%';
    

    【讨论】:

    • 没错,这只是一次性的事情。这适用于 8 种变体。
    【解决方案2】:

    您可以通过暴力字符串操作来做到这一点:

    select concat(left(name, instr(name, '(') - 1),
                  right(name, length(name) - instr(val, ')'))
                 )
    

    实际上,您希望在 update 语句中使用它:

    update location
        set name = concat(left(name, instr(name, '(') - 1),
                          right(name, length(name) - instr(val, ')'))
                         )
        where name like '%(%)%';
    

    你确实想要delete,因为这会删除整行。

    【讨论】:

      【解决方案3】:

      不要删除,而是执行更新,例如:

      UPDATE Location
      SET Name = LEFT(Name,LOCATE('(',Name)-1)
      WHERE LOCATE('(',Name) > 0
      

      我觉得语法有点不对。

      【讨论】:

        【解决方案4】:

        我为你做了这个例子:

        set @name = "Rurk Mount, Moscow, Russia(mountain)";
        
        set @fir = locate("(",@name);
        set @las = locate(")",@name);
        
        set @lef = left(@name,@fir-1);
        
        set @word = substr(@name,@fir+1,@las-@fir-1);
        
        select @fir,@las,@lef,@word,concat(@lef,' ',@word);
        

        通过这种方式,您可以看到完成任务的方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-09-08
          • 1970-01-01
          • 1970-01-01
          • 2022-07-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多