Oracle中的Like操作符使用"_"和"%"作为通配符,使用就像这样:SELECT name FROM test_like WHERE name like
"_a%"; 即匹配test_like表name列中第2个字母是a的所有行。但是注意,Oracle匹配时区分大小写的。也就是说上面的查询时无法查询到name="SAas"这行的。Oracle10g中提供的正则表达式功能可以很好的解决这个问题,当然这不是使用正则表达式函数的唯一优点,实际上它比Like操作符强大的多。正则表达式的语法就不用多说了,现在大多数语言都支持正则表达式了。下面主要介绍下Oracle中正表达式函数REGEXP_LIKE的使用:
- REGEXP_LIKE(x, pattern [, match_option])
-
- 当源字符串x匹配正则表达式pattern时,返回true。可以使用match_option修改默认匹配选项,该参数可以被设置为:
-
- - "c", 说明在进行匹配时区分大小写(默认选项)
- - "i", 说明在进行匹配时不区分大小写
- - "n" 允许使用可以匹配任意字符的操作符(通常是".")
- - "m", 将x作为一个包含多行的字符串
举个例子:
SELECT *
FROM test_reg
WHERE REGEXP_LIKE(
name,
"(a)1",
"i"); 上面的SQL语句匹配test_reg表中name列含有两个连续字符"a"(不区分大小写)的行,如name="SaAs"。此外,这里我们还使用了正则表达式中的后引用语法——
表示重复n次上次匹配的内容,此处(a)1表示匹配两个连续的字符"a"。需要注意的是,后引用必须使用双括号,否则会出现如下结果:
- SELECT * FROM test_reg WHERE REGEXP_LIKE(name, "a1", "i")
-
- ORA-12727: 正则表达式中的后向引用无效
最后一点,不要混淆LIKE操作符的通配符和正则表达式的语法,也就是说不要再正则表达式中使用LIKE操作符中的通配符,如果这样做会得到未知的结果,因为"_"和"%"会被正则表达式当做普通字符进行匹配。比如下面这条SQL想要得到name="SaAs"这条记录,但实际的查询结果为空。
- SQL> SELECT * FROM test_reg WHERE REGEXP_LIKE(name, "^_(a)1", "i");
-
- NAME
- ----------
实际应该使用:
- SQL> SELECT * FROM test_reg WHERE REGEXP_LIKE(name, "^.(a)1", "i");
-
- NAME
- ----------
- 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)
评论声明- 尊重网上道德,遵守中华人民共和国的各项有关法律法规
- 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
- 本站管理人员有权保留或删除其管辖留言中的任意内容
- 本站有权在网站内转载或引用您的评论
- 参与本评论即表明您已经阅读并接受上述条款
|
|