一: like
最基本的实现模糊匹配的语句,但一次只能匹配一种候选模式(like "%content%"),若要对多个候选进行模糊匹配,则需要写多次like,然后以or连接,但是当候选数目过多时,则该种方式明显不适用;
二.REGEXP_LIKE
与like的作用类似,以正则的方式进行匹配,支持多条件同时查询;
select col from table t where REGEXP_LIKE(t.col,'条件1|条件2')
该方法有点缺点就是后面的正则表达式长度有限制,如果条件没有那么多也可以考虑使用这种方式;
三.INSTR函数
使用instr函数这种方法可以解决大量候选条件的情况,方法如下:
1.首先建立一个候选条件的临时表B,将所有需要匹配的字段都加入这个临时表中;
2.使用联表查询,假设表A中某列需要进行多条件模糊匹配:
select ta.col from A ta,B tb where instr(ta.col,tb.col) > 0
使用这种方法即可解决需要同时模糊匹配大量候选条件的情况,需要注意的是如果候选条件中有重合的数据,如 "abc"和"ab"
,此时使用"abcd"去匹配会出现两条同样的结果,这时候只需要对唯一ID进行distince筛选即可。
select NVL(SUM(NVL(DKYE,0)),0) from SRPT_WTDKB t where REGEXP_LIKE(t.TXHYLX,'G|003024')
AND RQ='20190630' AND BZ='CNY' AND DKYE>0