[英]regular expression or replace function in where clause of a mysql query
我寫一個mysql查詢
select * from table where name like '%salil%'
可以正常工作,但不會返回名稱為“ sal-il”,“ sa @ lil”的記錄。
所以我想查詢如下
select * from table where
remove_special_character_from(name) like '%salil%'
remove_special_character_from(name)是mysql方法或正則表達式,可在執行之前從名稱中刪除所有特殊字符。
不,mysql不支持基於正則表達式的替換。
我建議使用存儲在單獨字段中的搜索字詞的規范化版本。
因此,在插入時,您會從數據中刪除所有非字母字符,並將其存儲在data_norm
字段中,以供將來搜索。
由於我不知道如何執行此操作,因此我將為此使用“計算列”,即取決於name
值但沒有特殊字符的列。 這樣,轉換成本只需支付一次,您甚至可以在新列上創建索引。
請參閱此答案如何執行此操作。
我同意Aaron和Shrapnel的看法,您應該在表上使用額外的列,例如search_name
來存儲名稱的規范化版本。
我注意到這個問題最初被標記為“ ruby-on-rails”。 如果這是Rails應用程序的一部分,則可以使用before_save回調設置此字段的值。
在MYSQL 5.1中,您可以像這樣使用REGEXP
進行正則表達式匹配
SELECT * FROM foo WHERE bar REGEXP "baz"
參見http://dev.mysql.com/doc/refman/5.1/en/regexp.html
但是,請注意,這會很慢 ,您應該執行其他海報所建議的操作,並將純凈值存儲在單獨的字段中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.