1

我正在尝试获取不在两个日期之间的日期列表。

我在数据库中的日期从“2013-01-01”到“2013-01-31”,但缺少 25、27、28 个日期。

现在假设我通过 Start date = '2013-01-01' 和 End date = '2013-01-31' 来获取数据库中缺失日期的列表,即 25、27、28 日期。

输出结果应该如下:

2013-01-25、2013-01-27、2013-01-28

任何帮助将非常感激。

4

1 回答 1

2

如果您使用的是 SQL Server 2005+,您可以尝试使用类似

DECLARE @StartDate DATETIME = '01 Jan 2013',
@EndDate DATETIME = '31 Jan 2013'

;With Dates AS (
    SELECT @StartDate RunDate
    UNION ALL
    SELECT RunDate + 1
    FROM Dates
    WHERE RunDate + 1 <= @EndDate
)
SELECT * 
FROM Dates d LEFT JOIN
    YourTable yt ON d.RunDate = yt.YourDate
WHERE yt.YourDate IS NULL
OPTION (MaxRecursion 0)

在这个查询中,我们使用递归 CTE 来生成日期序列(这OPTION (MaxRecursion 0)是为了确保您不会收到递归错误),然后我们将连接到有问题的表,并且只返回该表中缺少的值.

于 2013-09-03T12:53:05.150 回答