2010-04-07 50 views
0

的條款我寫了一個MySQL查詢正則表達式或替換功能在MySQL查詢

select * from table where name like '%salil%' 

其工作正常,但它將不會返回記錄名爲「SAL-IL」,「山@律」。

所以我想查詢類似下面

select * from table whereremove_special_character_from(名稱)like '%salil%'

remove_special_character_from(名稱)是MySQL的方法或正則表達式,從名稱中刪除所有特殊字符之前喜歡執行。

回答

1

不,mysql不支持基於regexp的替換。
我建議使用存儲在單獨字段中的搜索項的規範化版本。

因此,在插入時,您將從數據中除去所有非alpha字符,並將其存儲在data_norm字段中以供將來搜索。

1

因爲我知道沒有辦法做到這一點,所以我會使用一個「計算列」,即一列取決於name的值,但沒有特殊字符。這樣,轉換的成本只支付一次,您甚至可以在新列上創建索引。

請參閱this answer如何做到這一點。

1

我同意AaronCol. Shrapnel您應該在表格上使用額外的列,例如search_name來存儲名稱的標準化版本。

我注意到這個問題最初標籤爲ruby-on-rails。如果這是Rails應用程序的一部分,則可以使用before_save回調來設置此字段的值。

0

在MySQL 5.1中,你可以使用REGEXP做正則表達式這樣

SELECT * FROM foo WHERE bar REGEXP "baz" 

看到http://dev.mysql.com/doc/refman/5.1/en/regexp.html

匹配但請注意,這將是,你應該做別人的海報建議並將清理值存儲在單獨的字段中。