我必须获取两个日期之间每个月的日期集合。我对 SQL Server 没有更多的了解。
示例1:
如果我的开始日期是“01/20/2017”(MM/dd/yyyy),结束日期是“12/20/2017”(MM/dd/yyyy),则预期结果应如下所示。
2017-01-20
2017-02-20
2017-03-20
2017-04-20
2017-05-20
2017-06-20
2017-07-20
2017-08-20
2017-09-20
2017-10-20
2017-11-20
2017-12-20
示例2:
如果我的开始日期是“01/30/2017”(MM/dd/yyyy),结束日期是“12/20/2017”(MM/dd/yyyy),则预期结果应如下所示。
在此示例中,StartDate 为“01/30/2017”,因此在 2 月份,日历中没有第 30 日,因此我需要本月的最后一个日期。如果任何闰年出现在这些给定日期的范围内,则第 29 日将出现在结果集中。
预期结果
2017-01-30
2017-02-28
2017-03-30
2017-04-30
2017-05-30
2017-06-30
2017-07-30
2017-08-30
2017-09-30
2017-10-30
2017-11-30
提前致谢。
最佳答案
请尝试以下解决方案。只需根据您的要求设置 MinDate 和 MaxDate 即可。另请检查二月份的日期,以防 MinDate 为 30 或 31。
DECLARE @MinDate datetime,
@MaxDate datetime
SELECT @MinDate = '01/30/2017',
@MaxDate = '12/17/2020'
DECLARE @FilteredDate DATETIME = GETDATE();
;WITH CTE AS
(
SELECT TOP (DATEDIFF(MONTH, @MinDate, @MaxDate) + 1) DATEADD(MONTH, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate) AS CurrentDate
FROM sys.all_objects a
CROSS JOIN sys.all_objects b
)
SELECT * FROM CTE
WHERE CurrentDate > CONVERT(DATE, @FilteredDate) AND
CurrentDate <= CONVERT(DATE, @MaxDate)
ORDER BY CurrentDate ASC
关于sql - 如何在 SQL Server 中查找两个日期之间的日期集合以查找邮件拖欠情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46608015/