2014年12月28日 星期日

MySQL 的正規表達式 - REGEXP

MySQL 的正規表達式

MySQL 也有正規表達式可以讓我們在選取時就進行判斷而不要取回再判斷。

原因是這樣的,假設在欄位`role`中的資料是字串,內容長成這樣   1,2,3,6,8,12,14,15,21,22,25,....99

我希望取出欄位 `role` 中如果有數字 2 的資料,如果用這種方法取用,也許會取回我要的資料,但如果 2 在第一筆或最後一筆,就會取不到資料:
SELECT *  FROM `table` WHERE `role` likes '%,2,%'    <== 誤

再如果把 ',' 拿掉,則含有 2, 12, 21, 22, 25... 的資料都會被取出:
SELECT *  FROM `table` WHERE `role` likes '%2%'    <== 誤

還好有 REGEXP 這個東西,[[:<:]] 和 [[:>:]] 是MySQL 的邊界符號,和 perl 的 \b 類似,只要 2 的左右邊界都不是1數字、2字母或3_ 就符合

SELECT *  FROM `table` WHERE `role` REGEXP '[[:<:]]2[[:>:]]'

SELECT *  FROM `table` WHERE `role` REGEXP '(,|\b)2(,|\b)'



參考網頁: http://note.tc.edu.tw/331.html

沒有留言:

張貼留言