Welcome 微信登录

首页 / 数据库 / MySQL / Oracle中查询使用正则表达式函数REGEXP_LIKE

Oracle中的Like操作符使用"_"和"%"作为通配符,使用就像这样:SELECT name FROM test_like WHERE name like "_a%"; 即匹配test_like表name列中第2个字母是a的所有行。但是注意,Oracle匹配时区分大小写的。也就是说上面的查询时无法查询到name="SAas"这行的。Oracle10g中提供的正则表达式功能可以很好的解决这个问题,当然这不是使用正则表达式函数的唯一优点,实际上它比Like操作符强大的多。正则表达式的语法就不用多说了,现在大多数语言都支持正则表达式了。下面主要介绍下Oracle中正表达式函数REGEXP_LIKE的使用:
  1. REGEXP_LIKE(x, pattern [, match_option])   
  2.   
  3. 当源字符串x匹配正则表达式pattern时,返回true。可以使用match_option修改默认匹配选项,该参数可以被设置为:   
  4.   
  5. "c", 说明在进行匹配时区分大小写(默认选项)   
  6. "i", 说明在进行匹配时不区分大小写   
  7. "n"   允许使用可以匹配任意字符的操作符(通常是".")   
  8. "m", 将x作为一个包含多行的字符串  
举个例子:SELECT * FROM test_reg WHERE REGEXP_LIKE(name"(a)1""i");  上面的SQL语句匹配test_reg表中name列含有两个连续字符"a"(不区分大小写)的行,如name="SaAs"。此外,这里我们还使用了正则表达式中的后引用语法—— 表示重复n次上次匹配的内容,此处(a)1表示匹配两个连续的字符"a"。需要注意的是,后引用必须使用双括号,否则会出现如下结果:
  1. SELECT * FROM test_reg WHERE REGEXP_LIKE(name"a1""i")   
  2.     
  3. ORA-12727: 正则表达式中的后向引用无效  
最后一点,不要混淆LIKE操作符的通配符和正则表达式的语法,也就是说不要再正则表达式中使用LIKE操作符中的通配符,如果这样做会得到未知的结果,因为"_"和"%"会被正则表达式当做普通字符进行匹配。比如下面这条SQL想要得到name="SaAs"这条记录,但实际的查询结果为空。
  1. SQL> SELECT * FROM test_reg WHERE REGEXP_LIKE(name"^_(a)1""i");   
  2.     
  3. NAME  
  4. ----------  
实际应该使用:
  1. SQL> SELECT * FROM test_reg WHERE REGEXP_LIKE(name"^.(a)1""i");   
  2.     
  3. NAME  
  4. ----------   
  5. SaAs  
更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12Oracle复杂查询Oracle密码带特殊字符,如”@“号,在imp,exp里的写法相关资讯      Oracle入门教程 
  • 使用SQLT来构建Oracle测试用例  (08/28/2014 06:17:41)
  • Oracle AUTOTRACE 统计信息  (02/18/2013 08:25:40)
  • Linux Oracle服务启动&停止脚本与  (12/16/2012 14:42:37)
  • Oracle入门教程:把表和索引放在不  (07/13/2013 11:21:40)
  • Oracle直接路径加载--append的深度  (02/07/2013 08:26:36)
  • Oracle Connect By用法  (12/16/2012 13:36:10)
本文评论 查看全部评论 (1)
表情: 姓名: 字数


评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款