Oracle 中like常用但是其效率不是高。

特别是使用%a%-----》全局扫描,没有利用到任何索引。

情况可以的条件尽量下使用a%------》可以利用正序的索引。

%a------》可以利用反序的索引(当然得已有反序的索引)。

使用instr函数取代like查询,可提高效率,在海量数据中效果尤其明显。

1.%a%方式:

select * from pub_yh_bm t

where instr(t.chr_bmdm,'2')>0

等份于:

select * from pub_yh_bm t

where t.chr_bmdm like '%2%'

2.%a方式:

select * from pub_yh_bm t

where instr(t.chr_bmdm,'110101')=length(t.chr_bmdm)-length('110101')+1

等份于:

select * from pub_yh_bm t

where t.chr_bmdm like '%110101'

3.a%方式:

select * from pub_yh_bm t

where instr(t.chr_bmdm,'11010101')=1

等份于:

select * from pub_yh_bm t

where t.chr_bmdm like '11010101%'

ORACLE中的支持正则表达式的函数主要有下面四个:

1,REGEXP_LIKE :与LIKE的功能相似

2,REGEXP_INSTR :与INSTR的功能相似

3,REGEXP_SUBSTR :与SUBSTR的功能相似

4,REGEXP_REPLACE :与REPLACE的功能相似

它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法相同,

但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。

POSIX 正则表达式由标准的元字符(metacharacters)所构成:

'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。

'$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹

配 '\n' 或 '\r'。

'.' 匹配除换行符之外的任何单字符。

'?' 匹配前面的子表达式零次或一次。

'+' 匹配前面的子表达式一次或多次。

'*' 匹配前面的子表达式零次或多次。

'|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的

字符串。

'( )' 标记一个子表达式的开始和结束位置。

'[]' 标记一个中括号表达式。

'{m,n}' 一个精确地出现次数范围,m=

出现m次。

\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。

字符簇:

[[:alpha:]] 任何字母。

[[:digit:]] 任何数字。

[[:alnum:]] 任何字母和数字。

[[:space:]] 任何白字符。

[[:upper:]] 任何大写字母。

[[:lower:]] 任何小写字母。

[[:punct:]] 任何标点符号。

[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。

各种操作符的运算优先级

\转义符

(), (?:), (?=), [] 圆括号和方括号

*, +, ?, {n}, {n,}, {n,m} 限定符

^, $, anymetacharacter 位置和顺序

范例:

--regexp_like

--查询value中以1开头60结束的记录并且长度是7位

select * from fzq where value like '1____60';

select * from fzq where regexp_like(value,'1....60');

--查询value中以1开头60结束的记录并且长度是7位并且全部是数字的记录。

--使用like就不是很好实现了。

select * from fzq where regexp_like(value,'1[0-9]{4}60');

-- 也可以这样实现,使用字符集。

select * from fzq where regexp_like(value,'1[[:digit:]]{4}60');

-- 查询value中不是纯数字的记录

select * from fzq where not regexp_like(value,'^[[:digit:]]+$');

-- 查询value中不包含任何数字的记录。

select * from fzq where regexp_like(value,'^[^[:digit:]]+$');

--查询以12或者1b开头的记录.不区分大小写。

select * from fzq where regexp_like(value,'^1[2b]','i');

--查询以12或者1b开头的记录.区分大小写。

select * from fzq where regexp_like(value,'^1[2B]');

-- 查询数据中包含空白的记录。

select * from fzq where regexp_like(value,'[[:space:]]');

--查询所有包含小写字母或者数字的记录。

select * from fzq where regexp_like(value,'^([a-z]+|[0-9]+)$');

--查询任何包含标点符号的记录。

select * from fzq where regexp_like(value,'[[:punct:]]');

分享到:

2011-07-14 14:07

浏览 6129

分类:数据库

评论

like效率 regexp_Oracle 中like效率 正则表达式 浅析相关推荐

  1. 关于程序中查询效率的问题

    关于程序中查询效率的问题 在程序编码过程中会和很多的各种各样的数据打交道,正确的操纵数据是每个程序员的必备功课,也是最根本的.但是如何快速高效的查询出自己所需要的数据或者说符合条件的数据则显得至关重要 ...

  2. oracle执行脚本顺序执行吗,【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题 - 不及格的飞鱼...

    记录通过执行Oracle的执行计划查询SQL脚本中的效率问题 问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件. 首先,Quartz表达式培植的启动时间为 ...

  3. 二叉排序树中查找效率最高的是

    二叉排序树中查找效率最高的是平衡二叉树 二叉查找数的查找速度取决于树的深度 相同节点数深度最小的是平衡二叉树

  4. PHP中in_array 效率及其优化

    PHP中in_array 效率极其优化 时间 2013-12-26 12:05:20   LNMP100实验室 原文  http://www.lnmp100.com/1059 大家可能都用过in_ar ...

  5. php的正则表达式函数,php中常用的正则表达式函数

    php中常用的正则表达式函数 * preg_match() * preg_match_all() * preg_replace() * preg_filter() * preg_grep() * pr ...

  6. 水平拉滑轮组计算机械效率的题,机械效率杠杆论文,关于中考物理机械效率计算题*相关参考文献资料-免费论文范文...

    导读:这篇机械效率杠杆论文范文为免费优秀学术论文范文,可用于相关写作参考. 简单机械的机械效率计算是中考必考点,分值为6-8分.题型涉及选择题.填空题.探究题.综合计算题.所以学会解答简单机械的机械效 ...

  7. 如何评判软件测试的效率,如何衡量测试效率,提高测试效率?

    "根据系统测试发现缺陷数来衡量测试人员的系统测试效率,测试执行效率",这种方法是很片面的.它的优点是便于统计和分析,缺点是只通过一个方面考核了测试效率等,漏掉了很多其他因素. 那么 ...

  8. 人的效率还是机器的效率?

    <style type="text/css"> <!-- p, li {white-space:pre-wrap} --> </style> & ...

  9. Java List去重 Lis集合去重 List去重效率对比 List去重复元素效率对比 List去重效率

    Java  List去重 Lis集合去重 List去重效率对比 List去重复元素效率对比 List去重效率 --- List 去重复元素的几种办法 一.概述 面试的时候,有个常见的问题:" ...

最新文章

  1. golang管道channel与协程goroutine配合使用示例
  2. [LintCode] Simplify Path [字符串操作]
  3. Linux 可执行文件 ELF结构 及程序加载运行
  4. wsdl文档中的soap:address的生成规则_BAT大牛都在使用的数据库文档生成插件,不来看一下?...
  5. 云原生全景图之六 | 托管 Kubernetes 和 PaaS 解决什么问题
  6. android 集成同一interface不同泛型_C# 基础知识系列- 10 反射和泛型(二)
  7. 硬板床害死中国人?西方人都睡软床垫?究竟是谁睡错了?
  8. java安装pydev找不到_为什么安装成功也重启了,但是在window-preferences里找不到PyDev...
  9. 【快速入门Linux】3_Linux命令—终端命令格式、命令帮助信息、bash标准输入输出
  10. PAT-乙级-1009. *说反话 (20)
  11. CCF201412-1 门禁系统(100分)
  12. 帧中继多点子接口下配置OSPF
  13. 如何修复最常见的 macOS 11 Big Sur 问题?
  14. uartz Spring与Spring Task总结
  15. IDEA快捷键之搜索查询
  16. 时间序列 ARMA 模型实战!
  17. Godot 导出 Android apk
  18. 【离散数学】命题逻辑 带你快速学完离散数学
  19. width:100%和width:auto的区别
  20. 23 种设计模式详解(全23种)

热门文章

  1. 【.NET深呼吸】基础:自定义类型转换
  2. GetWindowText和GetDlgItemText的区别
  3. C++调用Asprise OCR识别图片
  4. mysql 用户名中主机$_phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接。您应当检查配置文件中的主机、用户名和密码,...
  5. redis zset转set 反序列化失败_Redis只往zset有序集合添加不存在的数据:关键字索引查询构建+源码分析...
  6. python 打包exe thread报错_pyinstaller 打包exe 遇到的坑
  7. eltree ref什么时候有_DBA:为什么你老写慢SQL
  8. 推流地址 java_Java实现腾讯云直播生成推流地址和播放地址
  9. python scapy sniff timeout_为什么我尝试使用scapy.sniff()函数获取此奇怪的输出,以尝试监听打开的网站的流量?...
  10. java8 list切片_java中怎么从一个数组中截取一定长度的元素放到新数组中