HelloDBA [English]
搜索Internet 搜索 HelloDBABA
  Oracle技术站。email: fuyuncat@gmail.com  MSN: fuyuncat@hotmail.com   acoug  acoug 

Oracle 10g新特性——正则表达式

[English]

作者: fuyuncat

来源: www.HelloDBA.com

日期: 2006-04-07 14:50:13

分享到  新浪微博 腾讯微博 人人网 i贴吧 开心网 豆瓣 淘宝 推特 Facebook GMail Blogger Orkut Google Bookmarks

       

    在进行查询时,有时候需要按照一定的特殊规则来查找某个字符串,比如,你可能需要查询第三位为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程序员可以使用一个正则表达式轻松搞定。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

 

  

Top

Copyright ©2005,HelloDBA.Com 保留一切权利

申明
by fuyuncat