计算当前年份是否是闰年

WITH x (
    dy
    ,mth
    )
AS (
    SELECT dy
        ,month(dy)
    FROM (
        SELECT dateadd(mm, 1, (getdate() - datepart(dy, getdate())) + 1) dy
        ) tmp1
    
    UNION ALL
    
    SELECT dateadd(dd, 1, dy)
        ,mth
    FROM x
    WHERE month(dateadd(dd, 1, dy)) = mth
    )
SELECT max(day(dy))
FROM x

利用 WITH 递归查询生成 2 月的每一天。

第一步先找出 2 月的第一天。

先找出当前年份的第一天:计算出当前日期是当前年份的第几天,用当前日期减去 该值,然后再加上 1 天。

select getdate()-datepart(dy,getdate())+1

既然有了当前年份的第一天,调用 DATEADD 函数加上 1 个月,就 能得到 2 月的第一天了。
select dateadd(mm,1,(getdate()-datepart(dy,getdate()))+1) dy

 WITH 子句的递归特性,不断为内嵌视图 TMP1 返回的 DY 加上 1,直到日期对应的 月份不再是  2 月,

posted @ 2020-10-22 15:37  飞扬92  阅读(127)  评论(0编辑  收藏  举报