2012-10-02 22 views
0

我需要在數據庫中搜索一些用戶輸入模式。
在Mysql SELECT語句的where子句中使用正則表達式(索引列上的10000行的比例)是否有效?
我搜索的日期,並且可以在這三種形式:正則表達式在Mysql select語句中

  • 2012應該匹配20122012/* & 2012/*/*
  • 2012/10應該匹配2012/10 & 2012/10/*
  • 2012/10/3只應2012/10/3
  • 匹配

注意:我有三列應該單獨檢查這種類型的匹配。

+0

您的字段是否總是有效的日期或是否需要驗證?也就是說,一列可能包含「2012年陰影」並需要拒絕它? –

+0

@JoachimIsaksson:是的,他們總是有效的 – RYN

回答

2

雖然我不能找到MySQL文檔在一定的參考,由於索引結構,正則表達式匹配不能使用索引查找

他們可能使用正則表達式來掃描索引而不是掃描整個表格,但是任何正則表達式搜索都會或多或少地與全表掃描等效。

如果您的正則表達式以一個常量字符串開頭,那麼您可能希望將查詢構造爲;

SELECT * FROM TableA WHERE field LIKE 'tr%' AND field RLIKE 'tr[uae].*' 

獲得來自像一些指標幫助, - 如果從字符串的開頭匹配 - 可以使用索引它的優勢。

編輯:由於您的選擇相當簡單,並匹配從字符串的開始,您可以使用LIKE使它們工作,其中將利用索引以及;

SELECT * FROM TableA WHERE field1='2012' OR field1 LIKE '2012/%' 
SELECT * FROM TableA WHERE field1='2012/10' OR field1 LIKE '2012/10/%' 
SELECT * FROM TableA WHERE field1='2012/10/3' 

到比較分裂成兩個的原因是爲了避免2012/1搜索將只用LIKE覆蓋這兩種情況下匹配2012/10(即LIKE '2012/1%')。

+0

請檢查我的編輯問題。 – RYN

+0

@ 4r1y4n更新了答案。 –

+0

非常感謝 – RYN

0

發生這種情況是因爲LIKE不應該接受正則表達式作爲參數。有REGEXP這樣的事情

WHERE field NOT REGEXP '%_[0-9]+'