如何像incidentType的IN语句那样优化多组日期区间查询的SQL代码
优化你的SQL查询:消除重复逻辑
嘿,我完全懂你现在的烦恼——每次重复写一模一样的incidentType IN (...)条件不仅啰嗦,还容易在修改时漏改某个地方。咱们可以通过合并日期条件的方式,把重复的筛选逻辑抽出来,让代码更简洁易维护!
优化后的SQL代码
SELECT * FROM sa_incidents WHERE incidentType IN ( 'RIDDOR - Dangerous Occurrence', 'RIDDOR - Public', 'Non RIDDOR - Near Miss', 'Non RIDDOR - Minor Injury' ) AND ( incidentDate BETWEEN '2019-01-01' AND '2019-12-31' OR incidentDate BETWEEN '2017-01-01' AND '2017-12-31' OR incidentDate BETWEEN '2016-01-01' AND '2016-12-31' )
逻辑说明
核心思路就是把所有日期区间的OR判断包裹在一个括号里,然后整体和incidentType的筛选条件做AND关联。这样incidentType的条件只需要写一次,就能作用于所有日期区间的筛选,完美消除重复逻辑!
额外小技巧(如果日期是整年份的话)
如果你的日期筛选刚好是完整的年份,还可以用YEAR()函数进一步简化日期条件(注意:如果incidentDate字段有索引,这种写法可能会让索引失效,需要根据实际情况选择):
SELECT * FROM sa_incidents WHERE incidentType IN ( 'RIDDOR - Dangerous Occurrence', 'RIDDOR - Public', 'Non RIDDOR - Near Miss', 'Non RIDDOR - Minor Injury' ) AND YEAR(incidentDate) IN (2016, 2017, 2019)
内容的提问来源于stack exchange,提问作者JohnM
相关产品推荐
相关产品推荐

