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

SQL中如何判断传入年份是否在指定年份区间内(含空值处理)

如何编写正确的SQL Where子句来匹配年份区间(含yearTo为null的情况)

看了你给出的示例数据和预期结果,我明白你之前的条件为什么不对了——你搞反了年份的比较逻辑,而且没处理yearTo为null时的特殊规则(从示例看,yearTo为null时只有yearFrom等于传入年份才会被选中)。

先拆解你的需求逻辑,从示例数据(传入年份2010)来看,需要选中的行满足以下两种情况之一:

  • 传入年份落在yearFrom和yearTo的闭区间内(也就是yearFrom <= 传入年份 <= yearTo)
  • yearFrom等于传入年份,且yearTo为null

对应的正确Where子句可以用两种等价的写法:

写法一:使用BETWEEN简化区间判断

WHERE (@year BETWEEN yearFrom AND yearTo)
   OR (yearFrom = @year AND yearTo IS NULL)

写法二:更直观的区间判断

WHERE (yearFrom <= @year AND yearTo >= @year)
   OR (yearFrom = @year AND yearTo IS NULL)

我们来验证这个条件对你示例数据的作用(传入@year=2010):

  • 第一行2009 | 2010:2009<=2010<=2010 → 命中(符合第一个条件)
  • 第二行2005 | null:2005≠2010 → 不命中(两个条件都不满足)
  • 第三行2010 | 2015:2010<=2010<=2015 → 命中(符合第一个条件)
  • 第四行2015 | 2018:2015>2010 → 不命中
  • 第五行2010 | null:yearFrom=2010且yearTo=null → 命中(符合第二个条件)

完全匹配你给出的hit/miss结果!

另外补充:如果你后续对yearTo为null的规则有调整(比如想表示yearFrom及以后的年份都算命中),只需把第二个条件改成yearTo IS NULL AND yearFrom <= @year即可,不过根据你当前的示例,上面的写法是完全正确的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:37:48