在進行查詢時,有時候須要按照必定的特殊規則來查找某個字符串,好比,你可能須要查詢第三位爲5-8,最後四位爲’8888’的全部電話。在9i以前,你可能須要寫一個很複雜的條件:
Select username from t_userinfo where (phonenumber like ‘135%8888’ or phonenumber like ‘136%8888’ or phonenumber like ‘137%8888’ or phonenumber like ‘138%8888’) and length(phonenumber) = 13;java
那時就會很羨慕java程序員能夠使用一個正則表達式輕鬆搞定。10g中,不再須要這麼複雜了, oracle也提供了幾個正則表達式函數,大大方便了開發人員:REGEXP_LIKE、REGEXP_REPLACE、REGEXP_INSTR、REGEXP_SUBSTR,分別用於模糊匹配、代替、插入、截取字符串。關於正則表達式的規則這就不詳細描述了, 能夠查相關資料獲得。簡單舉例。以上面例子爲例,咱們的查詢語句能夠寫成: 程序員
SQL> create table t_userinfo (username varchar2(10), phonenumber varchar2(13));
Table created
SQL> insert into t_userinfo values ('zhansan', '13012323434'); 1 row inserted SQL> insert into t_userinfo values ('lisi', '13512348888');
1 row inserted
SQL> insert into t_userinfo values ('wangwu', '13912328888'); 1 row inserted SQL> insert into t_userinfo values ('zhaoliu', '13743218888');
1 row inserted
SQL> insert into t_userinfo values ('sunqi', '1361234888');
1 row inserted
SQL> commit; Commit complete
SQL> Select username, phonenumber from t_userinfo 2 where REGEXP_LIKE(phonenumber, '13[5-8][0-9][0-9][0-9][0-9]8{4}');
USERNAME PHONENUMBER ---------- -------------
lisi 13512348888
zhaoliu 13743218888