sql - 如何在 SQL Server 中查找两个日期之间的日期集合以查找邮件拖欠情况?

标签 sql sql-server

我必须获取两个日期之间每个月的日期集合。我对 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/

相关文章:

sql - 找出模式的序号

c# - 如何在 C# 中使用 SQL 查询从 SQL 数据库中获取表的所有行

SQL Server 2005 : Round returns incorrect value if I use a float variable

sql-server - 使用 SQL Server 创建跨计算机互斥锁

sql - Oracle EXPLAIN PLAN FOR 不返回任何内容

MySQL 查询结果和

php - 如何使 "LIKE"查询在 MongoDB 中工作?

sql-server - 可串行化事务死锁

sql - SQL Server 中第一个实例 0 rest other 变成 1

sql-server - 多答案问题的最佳数据库模型是什么