我的'位置'表包含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'字符串中删除(%)术语。
答案 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);
通过这种方式,您可以看到完成任务的方法。