簡體   English   中英

mysql查詢的where子句中的正則表達式或替換函數

[英]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值但沒有特殊字符的列。 這樣,轉換成本只需支付一次,您甚至可以在新列上創建索引。

請參閱此答案如何執行此操作。

我同意AaronShrapnel的看法,您應該在表上使用額外的列,例如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM