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 - 从条目中删除子字符串的主要内容,如果未能解决你的问题,请参考以下文章

PB中取字符串子串的函数是啥

PB中取字符串子串的函数是啥

华为OD机试真题Java实现判断字符串子序列真题+解题思路+代码(2022&2023)

2022华为机试真题 C++ 实现 字符串子序列II

如何更改python字符串子字符串信息

[在python中使用正则表达式搜索字符串子字符串