我有一个表“locales”,其中一列名为“name”。名称中的记录总是以下划线(即“foo_”,“bar _”...)后面的一些字符开头。记录可以有多个下划线,并且可以重复下划线之前的模式(即“foo_bar_”,“foo_foo _”)。
如何通过一个简单的查询,我可以在第一个下划线之前删除所有内容,包括第一个下划线本身? 我知道如何在PHP中执行此操作,但我无法理解如何在MySQL中执行此操作。
答案 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));
可能会在那里遇到一些错误,但这是解决问题的基本方法。