文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

oracle中sql正则怎么写

2023-07-05 20:37

关注

本篇内容介绍了“oracle中sql正则怎么写”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Oracle中使用正则表达式需先使用REGEXP_LIKE函数来匹配字符串。正则表达式的语法与一般正则表达式相似,但具体的写法也受不同版本的Oracle环境不同。

在Oracle 10g及以下版本中,可以使用POSIX扩展来进行正则匹配

如:

^:匹配字符串的开始位置;
$:匹配字符串的结束位置;
.:匹配任何单个字符;
[ ]:匹配指定集合内的任何字符,如[abc]匹配a、b、c中任意一个字符;
[^ ]:匹配不在指定集合内的任何字符,如[^abc]匹配除a、b、c之外的任意字符;
*:匹配前面的子表达式零次或多次;
+:匹配前面的子表达式一次或多次;
?:匹配前面的子表达式零次或一次;
{n}:n为非负整数,匹配恰好n次;
{n,}:n为非负整数,匹配至少n次;
{n,m}:n和m为非负整数且n<=m,匹配至少n次且至多m次。
例如,可以使用REGEXP_LIKE函数配合正则表达式来查找符合条件的字符串:

SELECT *FROM employeesWHERE REGEXP_LIKE(job_title, '^Sales.*Manager$');

上述SQL查询会查找职位名称以“Sales”开头,且以“Manager”结尾的所有员工数据。

Oracle 11g及以上版本

对于Oracle 11g及以上版本,可以使用更强大的Perl兼容正则表达式(PCRE)来进行匹配
在使用PCRE时,先需要使用REGEXP_REPLACE函数中加入&rsquo;c&rsquo;选项进行匹配,然后再使用相应的正则表达式来实现匹配。

例如,可以使用如下的SQL查询来查找所有包含“John”或“Johnson”的名称:

SELECT *FROM employeesWHERE REGEXP_REPLACE(name, '(John|Johnson)', '*', 1, 0, 'c') != name;

我的实际例子:

SELECT *--DISTINCT CODE,count(1)FROM tableWHERE 1 = 1AND DATA_CATE = 'CPAU'--AND ext_5 LIKE 'ASSM%'AND REGEXP_REPLACE(ext_5, '(ASSM01|PSVA0100)', '*', 1, 0, 'c') != ext_5;AND VALID_FLG = 'Y'

是否走索引

正则表达式的匹配通常需要对目标字符串全文扫描,因此,在大多数情况下,使用正则表达式无法利用数据库索引。也就是说,在使用正则表达式时,往往无法使用索引来优化查询。

例如,假设有一个包含文本的表,其中有一个 text 字段,我们希望查找所有包含“abc”字符的记录。如果使用 LIKE 操作符,可以这样写:

SELECT * FROM table WHERE text LIKE &lsquo;%abc%&rsquo;;
如果 text 字段上有索引,那么这个查询会利用索引优化执行,因为 LIKE 操作符可以使用前缀索引。但是,如果使用正则表达式,查询语句将变为:

SELECT * FROM table WHERE REGEXP_LIKE(text, &lsquo;abc&rsquo;);
在这种情况下,不能使用索引来优化查询,因为 REGEXP_LIKE 函数需要全文扫描才能找到匹配的记录。

虽然正则表达式在某些情况下可能无法使用索引优化,但是可以尽可能地使用模糊查询来代替正则表达式,从而使用索引来优化查询。例如,在上面的例子中,可以使用 LIKE 操作符而不是 REGEXP_LIKE 函数来查询相同的数据。虽然 LIKE 操作符不能使用正则表达式语法,但是它可以使用前缀索引进行优化,可以在满足需求的情况下提高性能。

“oracle中sql正则怎么写”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯