分享

Oracle中查询使用正则表达式函数REGEXP

 昵称9283147 2016-05-17

    Oracle中的Like操作符使用'_'和'%'作为通配符,使用就像这样:

Java代码  收藏代码
  1. SELECT name FROM test_like WHERE name like '_a%';   

    即匹配test_like表name列中第2个字母是a的所有行。但是注意,Oracle匹配时区分大小写的。也就是说上面的查询时无法查询到name='SAas'这行的。

 

    Oracle10g中提供的正则表达式功能可以很好的解决这个问题,当然这不是使用正则表达式函数的唯一优点,实际上它比Like操作符强大的多。

    正则表达式的语法就不用多说了,现在大多数语言都支持正则表达式了。

    下面主要介绍下Oracle中正表达式函数REGEXP_LIKE的使用:

Sql代码  收藏代码
  1. REGEXP_LIKE(x, pattern [, match_option])  
  2.   
  3. 当源字符串x匹配正则表达式pattern时,返回true。可以使用match_option修改默认匹配选项,该参数可以被设置为:  
  4.   
  5. 'c', 说明在进行匹配时区分大小写(默认选项)  
  6. 'i', 说明在进行匹配时不区分大小写  
  7. 'n'   允许使用可以匹配任意字符的操作符(通常是'.')  
  8. 'm', 将x作为一个包含多行的字符串  

    举个例子:

Sql代码  收藏代码
  1. SELECT * FROM test_reg WHERE REGEXP_LIKE(name'(a)\1''i');  

    上面的SQL语句匹配test_reg表中name列含有两个连续字符'a'(不区分大小写)的行,如name='SaAs'。此外,这里我们还使用了正则表达式中的后引用语法——\n表示重复n次上次匹配的内容,此处(a)\1表示匹配两个连续的字符'a'。

    需要注意的是,后引用必须使用双括号,否则会出现如下结果:

Sql代码  收藏代码
  1. SELECT * FROM test_reg WHERE REGEXP_LIKE(name'a\1''i')  
  2.    
  3. ORA-12727: 正则表达式中的后向引用无效  

 

    最后一点,不要混淆LIKE操作符的通配符和正则表达式的语法,也就是说不要再正则表达式中使用LIKE操作符中的通配符,如果这样做会得到未知的结果,因为'_'和'%'会被正则表达式当做普通字符进行匹配。

    比如下面这条SQL想要得到name='SaAs'这条记录,但实际的查询结果为空。

Sql代码  收藏代码
  1. SQL> SELECT * FROM test_reg WHERE REGEXP_LIKE(name'^_(a)\1''i');  
  2.    
  3. NAME  
  4. ----------  

   实际应该使用:

Sql代码  收藏代码
  1. SQL> SELECT * FROM test_reg WHERE REGEXP_LIKE(name'^.(a)\1''i');  
  2.    
  3. NAME  
  4. ----------  
  5. SaAs  
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多