2011-08-24 67 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'))