【发布时间】:2016-05-04 12:21:06
【问题描述】:
我想通过在 SQL Server 中声明月份和年份来获取所有日期。
谁能分享几行简单的 SQL 代码来获取它。
例如:
DECLARE @month AS INT = 5
DECLARE @Year AS INT = 2016
SELECT * from Something
我已经尝试过以下事情,
DECLARE @month TINYINT=5
;WITH CTE_Days AS (
SELECT DATEADD(
MONTH,
@month,
DATEADD(
MONTH,
-MONTH(GETDATE()),
DATEADD(
DAY,
-DAY(GETDATE()) + 1,
CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)
)
)
) Dates
UNION ALL
SELECT DATEADD(DAY, 1, Dates)
FROM CTE_Days
WHERE Dates < DATEADD(
DAY,
-1,
DATEADD(
MONTH,
1,
DATEADD(
MONTH,
@month,
DATEADD(
MONTH,
-MONTH(GETDATE()),
DATEADD(
DAY,
-DAY(GETDATE()) + 1,
CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)
)
)
)
)
)
)
SELECT Dates
FROM CTE_Days
但我正在寻找行数更少且答案简短的简单解决方案
【问题讨论】:
-
您需要在数据库中创建一个日期表。然后您就可以使用 BETWEEN 函数进行链接了。
-
请投反对票的原因!
-
“这个问题没有显示任何研究工作”。在这里提问之前您尝试过什么?
-
我自己不是反对者,但我怀疑原因是asked before。您可以使用日历/日期表、计数表或递归 CTE。其中我推荐date table。这些非常方便,尤其是在报告方面。
-
已更改为赞成票 :)
标签: sql-server sql-server-2012