MySQL - 从条目中删除子字符串

时间:2013-06-21 20:24:02

标签: mysql sql substring sql-like

我的'位置'表包含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

一些条目包括名称中的“(山)”,“(河)”或“(...)”(8个不同的)。我不知道为什么表是这样创建的。该数据应该有一个额外的列,但是很好。

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

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

我知道这会删除整行,但我只是想从'Name'字符串中删除(%)术语。

4 个答案:

答案 0 :(得分:22)

如果您只有8种变体,这是一次性的事情,您可以通过替换来实现。

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

答案 1 :(得分: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,因为这会删除整行。

答案 2 :(得分:0)

而不是删除,请执行UPDATE,例如:

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

我认为语法有点偏。

答案 3 :(得分:0)

我为你做了这个例子:

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);

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