MySQL:REGEXP删除部分记录

时间:2011-08-24 19:31:47

标签: mysql regex

我有一个表“locales”,其中一列名为“name”。名称中的记录总是以下划线(即“foo_”,“bar _”...)后面的一些字符开头。记录可以有多个下划线,并且可以重复下划线之前的模式(即“foo_bar_”,“foo_foo _”)。

如何通过一个简单的查询,我可以在第一个下划线之前删除所有内容,包括第一个下划线本身? 我知道如何在PHP中执行此操作,但我无法理解如何在MySQL中执行此操作。

3 个答案:

答案 0 :(得分:4)

SELECT LOCATE('_', 'foo_bar_') ...将为您提供第一个下划线的位置,SUBSTR('foo_bar_', LOCATE('_', 'foo_bar_'))将为您提供从第一个下划线开始的子字符串。如果你想摆脱那个,也要将locate-value增加一个。

如果您现在想要替换表中的值,可以使用UPDATE table SET column = SUBSTR(column, LOCATE('_', column))等更新语句来执行此操作。

答案 1 :(得分:0)

select substring('foo_bar_text' from locate('_','foo_bar_text'))

答案 2 :(得分:-1)

MySQL REGEX只能匹配数据,不能替换它们。您需要在PHP脚本中替换客户端,或者在MySQL中使用标准字符串操作来进行更改。

UPDATE sometable SET somefield=RIGHT(LENGTH(somefield) - LOCATE('_', somefield));

可能会在那里遇到一些错误,但这是解决问题的基本方法。