SQL Server | 模糊匹配多种字样

统计工作中经常存在一个情况:

想要从科室表TableDept 中匹配筛选数据,但因为科室命名时,不一定完全匹配这些字样,导致无法用 in 来直接检索。比如口腔科,在科室命名中可能存在的情况有‘口腔一科’、‘口腔二科’等,因此需要进行模糊匹配,把含‘口腔’字样的科室都筛选出来。

这里记录的是列Dept_name 中含 '口腔', '眼科', '耳鼻喉' 等字样的科室纳入/排除的实践操作。

一般情况下,我们会选用 like/ not like 结合 or/ and的形式来筛选数据:

--纳入口腔科、眼科、耳鼻喉科
select *
from TableDept t
where t.Dept_name like '%口腔%'
        or t.Dept_name like '%眼科%'
        or t.Dept_name like '%耳鼻喉%'
;

--排除口腔科、眼科、耳鼻喉科
select *
from TableDept t
where t.Dept_name not like '%口腔%'
        and t.Dept_name not  like '%眼科%'
        and t.Dept_name not  like '%耳鼻喉%'
;

但是重复的写 like/ not like 语句很啰嗦,如果需要纳排的字样较多,处理起来极不方便。

因此,考虑使用 Exists/ Not Exists 来实现快速添加字样。

--纳入口腔科、眼科、耳鼻喉科
select *
from TableDept t
where exists (select 1
               from (
                    value('口腔'),('眼科'),('耳鼻喉') --其他科室在此处修改
                    ) as textvalue(dept)
                where t.dept_name like '%'+textvalue.dept+'%'
                )
;


--排除口腔科、眼科、耳鼻喉科
select *
from TableDept t
where not exists (select 1
               from (
                    value('口腔'),('眼科'),('耳鼻喉') --其他科室在此处修改
                    ) as textvalue(dept)
                where t.dept_name like '%'+textvalue.dept+'%'
                )
;

使用exists可以快速的添加要纳排的字样,同时也加强了代码的可读性和可维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值