Oracle-like 多条件过滤以及and or用法

分类 : .NET技术

相信大家都使用过like进行模糊匹配查询,在oracle中,instr()方法可以用来代替like进行模糊查询,大数据量的时候效率更高。本文将对instr()的基本使用方法进行详解以及通过示例讲解与like的效率对比。

oracle如何like多个值,oracle,like,多个值,多个条件,模糊查询,like查询

案例:一次性删除多条数据的sql语句 delete from emp where id in (1002,1003,1004);


下面,我们以一些示例讲解使用方法:


写oracle sql时有时候会有 and (字段 like ‘匹配串1’or 字段 like ‘匹配串2’or ...)这样的情况出现,下面提供一个简洁点的解决方案--

and REGEXP_LIKE(字段名, '(匹配串1|匹配串2|...)') //全模糊匹配

and REGEXP_LIKE(字段名, '^(匹配串1|匹配串2|...)') ";//右模糊匹配

and REGEXP_LIKE(字段名, '(匹配串1|匹配串2|...)$') ";//左模糊匹配

————————————————


instr()与like比较

instr函数也有三种情况:

a. instr(字段,'关键字') > 0    相当于 字段like '%关键字%':        表示在字符串中包含‘关键字’

b. instr(字段,'关键字') = 1    相当于 字段like '关键字%'            表示以‘关键字’开头的字符串

c. instr(字段,'关键字') = 0    相当于 字段not like '%关键字%'  表示在字符串中不包含‘关键字’

————————————————


--建议用这种写法,数据量大又需要模糊查询的时候,用instr函数效率比like要高很多
select b.id from table b
where (instr(b.context,'apple')>=1 or instr(b.context,'banana')>=1)
and instr(b.context,'strawberry')=0
;


下面是模糊查询,也是关键字查询

like是模糊查询,也就是站内关键词查询,%是代表任意字符,like '%刘%'

%方括号这是查询性刘和彭的信息,%[彭刘]%

%双 表中选取居住在以 双 结尾的城市里的人,like '%双'

【1-9】%这是查询1到就中间的信息,like '刘%'



分析过程:

我新建了一个表biao_callee_nng,用以存放导入的被叫号码信息

所有的通话数据保存在t_phonvbi_202103中,想要查询必须要实现like,就是以下sql的实现效果


select org_caller_nng,org_callee_nvg,call_seconds,start_time,switch_id,

in_trunk,out_trunk,settle_carrier,file_name

from t_phonvbi_202103 a

where a.org_callee_nvg like '%13800100186%'


但是这样的号码有好多个,有时候有一百多个,以上的sql只能查询一个号码的通话记录

一开始我想用游标实现,写一个游标,把被叫号码放入游标中,然后写一个循环,每次都依次查询一下,

但后来发现t_phonvbi_202103数据量太大,like一次就要花费时间20分钟,100个就是2000分钟(30个小时),耗时量太大,效率太低。

后来查阅资料,多次尝试下写下这个sql,总算是实现了查询,实验论证效率也还不错。


select org_caller_nng,a.org_callee_nvg,call_seconds,start_time,switch_id,

in_trunk,out_trunk,settle_carrier,file_name

from t_phonvbi_202103 a

where exists

(select 1 from biao_callee_nng c where a.org_callee_nvg

like '%||c.org_callee_nvg||%') ;


如果t_phonvbi_202103表的数据量不大,可以考虑使用简版,简版更易于了解,也能更清楚明白like多个值是如何实现的,但使用exists总是一个好习惯。如果你有类似的需求,希望可以帮到你。


select org_caller_nng,a.org_callee_nvg,call_seconds,start_time,switch_id,

in_trunk,out_trunk,settle_carrier,file_name

from t_phonvbi_202103 a,biao_callee_nng c

where a.org_callee_nvg like '%||c.org_callee_nvg||%'


查询sql演示脚本:

select t.item_code

 from MDS_ITEM t

where REGEXP_LIKE(t.item_code, 'DZ-200|FS-001')

--这里的DZ-200|FS-001不需要加%,自动就是模糊查询





相关文章

HTML 对象:td/th axis 属性



分类: .NET技术    访问() .NET技术    Web前端    JAVA开发    HTML基础    数据库    电脑知识    CSS基础
CSS教程-web前端教程-免费教程
HTML教程-web前端教程-免费教程

分类

.NET技术 Web前端 JAVA开发 HTML基础 数据库 电脑知识 CSS基础

随机阅读

FileStream常用的属性和方法:
Java:String和Date、Timestamp之间的转换
Oracle如何实现like多个值的查询
HTML5是什么语言
SQL Server 优化提速整理
oracle数据库模糊查询匹配多个字符串
oracle sql like多个条件函数
oracle字段like多个条件
上海有什么好玩的地方?
html入门网页制作 零基础学习网页制作,从何学起
方正综艺简体下载大全,什么方正综艺简体字体下载
方正中等线简体免费字体下载,方正中等线简体字体免费下载
css 字体颜色(css color教程)
Java:String和Date、Timestamp之间的转换
方正中倩繁体(FZZQFW)下载字体后如何安装,如何下载字体并安装

最新

零基础学习C语言,怎么入门?
C语言使用什么软件?
c语言用什么软件编写(新手c语言基础知识入门)
Oracle如何实现like多个值的查询
Oracle如何实现like多个值的查询 - 数据库
oracle 多个like条件查询
Oracle中关键字like的使用总结
oracle 中模糊查询对like的代替insrt()函数
oracle数据库模糊查询匹配多个字符串
Oracle如何实现like多个值的查询 - Oracle - 服务器

推荐阅读

vscode----vue中HTML代码tab键自动补全
html如何实现鼠标悬停显示文字,鼠标移走文字消失。
c语言中break语句的作用
C#语言之“string格式的日期时间字符串转为DateTime类型”
undefined是什么意思啊
DIV CSS字体(font-family)实现字体样式设置
AirPods怎么删除配对过的设备 airpods可以和电脑连接的
js 中日期 转换成时间戳 例如2013-08-30 转换为时间戳
risk-taking中文是什么意思
C语言程序中break是什么意思?

Copyright © 2017 CSS5.NET教程.CSS5 内容仅用于学习和测试参考。 css5.net All Rights Reserved 蜀ICP备15003849号-16