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

SQL查询:如何根据闰年状态控制WHERE子句筛选逻辑?

解决SQL条件查询的闰年判断问题

你的原SQL语句逻辑错误,导致闰年时无法返回任何结果。问题出在WHERE子句用AND连接了三个条件:只有当指定年份是非闰年,且出生日期既不是2月也不是29日时才会返回记录——但闰年时第一个条件ISDATE(...) !=1为假,整个AND条件不成立,自然查不到数据。

正确的逻辑应该是:如果是闰年,返回所有记录;如果是非闰年,排除出生日期为2月29日的记录。对应的WHERE子句需要用OR来拆分两种情况:

DECLARE @year int
SET @year = YEAR(GETDATE()) 
--SET @year = 2024

SELECT * FROM Person
WHERE 
    -- 闰年时返回所有记录
    ISDATE(CAST(@YEAR AS char(4)) + '0229') = 1 
    -- 非闰年时排除2月29日的记录
    OR NOT (MONTH(DateOfBirth) = 2 AND DAY(DateOfBirth) = 29)

逻辑说明:

  • 当ISDATE(CAST(@YEAR AS char(4)) + '0229') = 1为真时,说明指定年份是闰年,此时OR条件整体为真,直接返回所有Person表记录。
  • 当指定年份是非闰年时,第一个条件为假,此时会判断第二个条件:NOT (MONTH(DateOfBirth)=2 AND DAY(DateOfBirth)=29),也就是排除掉出生日期是2月29日的记录,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:59:57