[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 '高雄|高市|台南|高縣';







arrow
arrow

    PG Levin Li 發表在 痞客邦 留言(0) 人氣()