MySQL - 从条目中删除子字符串
Posted
技术标签:
【中文标题】MySQL - 从条目中删除子字符串【英文标题】:MySQL - Remove substring from an entry 【发布时间】: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 '%(%)%';
我知道这会删除整行,但我只想从“名称”字符串中删除 (%) 项。
【问题讨论】:
【参考方案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);
通过这种方式,您可以看到完成任务的方法。
【讨论】:
以上是关于MySQL - 从条目中删除子字符串的主要内容,如果未能解决你的问题,请参考以下文章