1、同时模糊匹配多个字符
表数据信息:
我们常见的方式是使用 like 加 or 处理,但是如果匹配的字符比较多,这样写会比较麻烦,这里有一种简单的写法。
① 结果包含指定多个字符
需求:筛选出姓名中包含:王、赵、孙任意姓氏的数据
select * from zhong_ods.t_ods_exam_student where u_name like any (array['%王%', '%张%', '%孙%']);
查看输出结果:
② 结果排除多个指定字符
需求:筛选出姓名中不包含:王、赵、孙任意姓氏的数据。
分析:这个需求是对上面的否定,逻辑和条件同时否定即可
select * from zhong_ods.t_ods_exam_student where u_name not like all (array['%王%', '%张%', '%孙%']);
查看输出结果:
2、升级使用,统计关键字计数
select t2.keys, count(distinct t1.content_id)
from
(
select content_id, title||content content1
from public_sentiment.t_public_sentiment_integration
where title||content like any (array['%违纪%', '%勒索%'])
) t1
left join
(
select distinct regexp_split_to_table('违纪|勒索','\|') keys
) t2
on position(t2.keys in t1.content1) > 0 group by t2.keys ;
# 查询结果如下
--"勒索" 401
--"违纪" 8069