如何在SQL的WHERE子句中精准查询指定跨年月份的数据?
解决SQL查询特定年月组合的问题
原语句的问题在于,year IN ('2022', '2023') AND month IN ('12', '1') 会匹配这两年里所有的1月和12月,包括2022年1月、2023年12月,不符合你要仅获取2022年12月和2023年1月的需求。可以用以下几种方式修改:
方法一:精确配对组合查询
直接用OR把两个目标年月的精确条件组合起来,逻辑清晰且兼容性强:
SELECT month, year, [...] from table WHERE other condition AND ( (year = '2022' AND month = '12') OR (year = '2023' AND month = '1') )
方法二:利用日期字段范围查询(如果表中有完整日期字段)
如果你的表存在类似date_column的完整日期字段,直接用日期范围筛选更简洁,还能利用日期索引提升性能:
SELECT month, year, [...] from table WHERE other condition AND date_column BETWEEN '2022-12-01' AND '2023-01-31'
方法三:元组匹配查询(部分数据库支持)
像PostgreSQL、MySQL 8.0+等数据库支持元组匹配写法,语法更紧凑:
SELECT month, year, [...] from table WHERE other condition AND (year, month) IN (('2022', '12'), ('2023', '1'))
内容的提问来源于stack exchange,提问作者LennartPfeiler
相关产品推荐
相关产品推荐

