[MySQL]使用正則表達式(REGEXP)的用法
練習
需求說明:
有多筆資料,每筆有多種商品代號碼(如:AAA,BBB,AAA_BBB)
每種商品用此附號 ( , )分開,
請找出商品代號為AAA的資料。
語法如下:
SELECT*
FROM
(#測試資料
SELECT "AAA,BBB,CCC,DDD,EEE,AAA_BBB" AS number
UNION ALL
SELECT "AAA_BBB,CCC_DDD,EEE_AAA_BBB" AS number
UNION ALL
SELECT "AAA_BBB_CCC,DDD_EEE,AAA_BBB" AS number
UNION ALL
SELECT "BBB,CCC_DDD,EEE_AAA_BBB,AAA" AS number
UNION ALL
SELECT "CCC_DDD,EEE_AAA_BBB" AS number
UNION ALL
SELECT "CCC_DDD" AS number
UNION ALL
SELECT "AAA" AS number
)AS testData
where testData.number REGEXP '[[:<:]]AAA[[:>:]]' > 0;#判斷語法
UNION ALL 的用法
結果如下:
會將有AAA的商品找出來,而上述的第二筆中的AAA_BBB,是不會背找出來的。
其它用法如下:
參考資料:
G MySQL Regular Expressions
http://dev.mysql.com/doc/refman/5.1/en/regexp.html
以下轉貼
來源:八克里-正規表示式 Regular expressions 使用在 mysql 的 sql 查詢
正規表示式 Regular expressions 使用在 mysql 的 sql 查詢
果然是各殺手級的應用
mysql RE用法
http://dev.mysql.com/doc/refman/5.1/en/regexp.html
測試 RE
http://osteele.com/tools/rework/
RFC email正規表示
http://www.regular-expressions.info/email.html
官方網站的例子是這樣的
mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]'; -> 1
mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]'; -> 0
字串的比對透過 RE 比對後得到 ture or flase 兩種結果
結果應用在 where 查詢上面,就可以找到符合我們描述字串的東西了
WHERE phone REGEXP '(435)';
會用到這個功能原因是,在原始的資料檔案中在email這個欄位,因為是大批的匯入系統
但使佣者在建立的時候,每個人的格式不同創造出了眾多的 email表達方式,又剛好要用到這些
email來發電子文宣,只好用 RE 來做簡單的 email過濾了.....
需要兩個校友的資料,以 .CSV 檔案
1.有email的校友,學號,姓名,email 且 email 合乎 REF 標準
SELECT `sid`,`username`,`email` FROM `data` WHERE `email` regexp '^[[:alnum:]]+@([[:alnum:]\.{1,}])+\.[a-z]{2,3}$' ;
2.有地址的校友,學號,姓名,郵遞區號,地址,地址做簡單的過濾
SELECT `username`,`register_zip`,`register_addr` FROM `data`
where register_zip AND register_addr REGEXP '高雄|高市|台南|高縣';
留言列表