sql-server - 如何生成具有开始月份日期和结束月份日期的日历表

标签 sql-server tsql sql-server-2012

我需要在两个日期之间生成日历表,该两个日期具有乞讨月日期和月底日期。如果大于今天,则应在当前日期停止。

应该看起来像这样:

enter image description here

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

谢谢

最佳答案

如果没有日历表,则可以使用临时提示表

示例

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

关于sql-server - 如何生成具有开始月份日期和结束月份日期的日历表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54681444/

相关文章:

sql-server - 在本地运行 sqlcmd - 定位服务器时出错

sql - 如果 SQL 中的值重复,如何使 select 语句返回 "NULLs"

sql - 子表中的外键约束允许插入父表中不存在的值

sql - 使用 GetDate() 作为 SELECT DISTINCT 的一部分不是很好吗?

sql - Transact SQL 运行另一个 Transact SQL 脚本

SQL 类型转换

sql-server - SQL 中是否有此查询语法的实现?

sql - 使用嵌套查询与 CTE 以及性能影响

c++ - 无法使用 SQL VDI(虚拟设备接口(interface))创建 strip 化备份

sql-server - 触发器 - 是否需要 BEGIN/COMMIT TRAN