2011-08-24 110 views
1

我有一个名为“name”的列“locales”表。名字中的记录总是以一系列以下划线(即“foo_”,“bar_”...)开头的字符开头。记录可以有多个下划线,下划线之前的模式可以重复(即“foo_bar_”,“foo_foo_”)。MySQL:REGEXP删除部分记录

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

回答

4

SELECT LOCATE('_', 'foo_bar_') ...会给你第一个下划线的位置,SUBSTR('foo_bar_', LOCATE('_', 'foo_bar_'))会给你从第一个下划线开始的子字符串。如果你想摆脱这一点,那么增加一个定位值。

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

+1

Brillant,这工作完美。谢谢! –

-1

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

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

可能在那里得到了一些错误的错误,但这是实现它的基本方式。

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