2008/12/11

正規表示式 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 '高雄|高市|台南|高縣';

就先這樣拉!!