You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL优化:改进WHERE子句中重复三次的NOT LIKE多字符串过滤逻辑

嘿,作为SQL新手能想着优化查询逻辑真的超棒!你当前的过滤条件完全可以简化成更简洁的写法,我给你分享几种实用的方式:

方式1:合并NOT条件,减少重复函数调用

你现在多次调用Upper(customer_name),其实可以把所有要排除的LIKE条件用OR组合,再整体套个NOT,这样只需要一次大小写转换,既简洁还能小幅度提升性能:

AND NOT (Upper(customer_name) LIKE Upper('%Demo%') 
         OR Upper(customer_name) LIKE Upper('%Demo Test System%') 
         OR Upper(customer_name) LIKE Upper('%Practice%'))
方式2:用正则表达式一次性匹配(分数据库)

如果你的数据库支持正则匹配,这是最精简的写法,不同数据库的语法略有区别:

  • MySQL/MariaDB 版本:
AND NOT Upper(customer_name) REGEXP Upper('Demo|Demo Test System|Practice')
  • PostgreSQL 版本(自带不区分大小写的正则运算符~*,甚至不用转Upper):
AND NOT customer_name ~* 'Demo|Demo Test System|Practice'
  • SQL Server 2016+ 版本(用REGEXP_LIKE加'i'参数实现不区分大小写):
AND NOT REGEXP_LIKE(customer_name, 'Demo|Demo Test System|Practice', 'i')
额外小技巧:利用数据库的不区分大小写规则

如果你的数据库用的是不区分大小写的排序规则(比如SQL Server的CI排序规则、MySQL的utf8_general_ci),那连Upper()都可以直接去掉,数据库会自动忽略大小写做匹配,代码更清爽:

AND NOT (customer_name LIKE '%Demo%' 
         OR customer_name LIKE '%Demo Test System%' 
         OR customer_name LIKE '%Practice%')

内容的提问来源于stack exchange,提问作者Amar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 01:08:10