我正在尝试获取不在两个日期之间的日期列表。
我在数据库中的日期从“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
任何帮助将非常感激。
我正在尝试获取不在两个日期之间的日期列表。
我在数据库中的日期从“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
任何帮助将非常感激。
如果您使用的是 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)
是为了确保您不会收到递归错误),然后我们将连接到有问题的表,并且只返回该表中缺少的值.