代码之家  ›  专栏  ›  技术社区  ›  Serdia

如何生成有求月日期和月末日期的日历表

  •  1
  • Serdia  · 技术社区  · 5 年前

    我需要在有乞求月日期和结束月日期的两个日期之间生成日历表。如果它大于今天,那么它应该在当前日期停止。

    应该如下所示:

    enter image description here

    如您所见,eomonth列的最后一个值具有今天的日期(而不是月末)

    谢谢你

    1 回复  |  直到 5 年前
        1
  •  1
  •   John Cappelletti    5 年前

    如果没有日历表,可以使用特殊的计数表

    例子

    Declare @Date1 date = '2018-01-01'
    Declare @Date2 date = GetDate()
    
    Select [Month] = D
          ,[Eomonth] = case when EOMONTH(D)>@Date2 then convert(date,GetDate()) else EOMONTH(D) end
     From  (
            Select Top (DateDiff(Month,@Date1,@Date2)+1) 
                   D=DateAdd(Month,-1+Row_Number() Over (Order By (Select Null)),@Date1) 
             From  master..spt_values n1
           ) A
    

    退换商品

    Month       Eomonth
    2018-01-01  2018-01-31
    2018-02-01  2018-02-28
    2018-03-01  2018-03-31
    2018-04-01  2018-04-30
    2018-05-01  2018-05-31
    2018-06-01  2018-06-30
    2018-07-01  2018-07-31
    2018-08-01  2018-08-31
    2018-09-01  2018-09-30
    2018-10-01  2018-10-31
    2018-11-01  2018-11-30
    2018-12-01  2018-12-31
    2019-01-01  2019-01-31
    2019-02-01  2019-02-13   <-- Today's date