oracle字段like多个条件
写oracle sql时偶然辰会有 and (字段 like ‘匹配串1’or 字段 like ‘匹配串2’or ...)这样的环境呈现,下面提供一个简捷点的办理方案: and REGEXP_LIKE(字段名,‘(匹配串1|匹配串2|...)‘) //全恍惚匹配 and REGEXP_LIKE(字段名,‘^(匹配串1|匹配串2|...)‘) ";//右恍惚匹配 and REGEXP_LIKE(字段名,‘(匹配串1|匹配串2|...)$‘) ";//左恍惚匹配 案例:某天客户有一个需求,给定一批的手机号码可能电话号码,查询出相干的通话记录,以及相干的一些信息。因为客户给的被叫号码很不类型,查询的时辰较量贫困。 说明进程: 我新建了一个表security_phonebill_callee_num,用以存放导入的被叫号码信息 全部的通话数据生涯在t_phonebill_201702中,想要查询必必要实现like,就是以下sql的实现结果 select org_caller_num,org_callee_num,call_seconds,start_time,switch_id,in_trunk,out_trunk,settle_carrier,file_name from t_phonebill_201702 a where a.org_callee_num like ‘%13800100186%‘ 可是这样的号码有许多几何个,偶然辰有一百多个,以上的sql只能查询一个号码的通话记录 一开始我想用游标实现,写一个游标,把被叫号码放入游标中,然后写一个轮回,每次都依次查询一下, 但其后发明t_phonebill_201702数据量太大,like一次就要耗费时刻20分钟,100个就是2000分钟(30个小时),耗时量太大,服从太低。 其后查阅资料,多次实行下写下这个sql,总算是实现了查询,尝试论证服从也还不错。 select org_caller_num,a.org_callee_num,file_name from t_phonebill_201702 a where exists (select 1 from security_phonebill_callee_num c where a.org_callee_num like ‘%||c.org_callee_num||%‘) ; 假如t_phonebill_201702表的数据量不大,可以思量行使简版,简版更易于相识,也能更清晰大白like多个值是怎样实现的,但行使exists老是一个好风俗。假如你有相同的需求,但愿可以帮到你。 select org_caller_num,file_name from t_phonebill_201702 a,security_phonebill_callee_num c where a.org_callee_num like ‘%||c.org_callee_num||%‘ (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |