我正在尝试在两个日期之间获取日期列表。
我在数据库中的日期是“2013-01-01”到“2013-01-31”,但缺少25,27,28个日期。
现在假设我通过了开始日期='2013-01-01'和结束日期='2013-01-31'来获取数据库中缺少日期的列表,即25,27,28个日期。
输出结果应如下:
2013年1月25日, 2013年1月27日, 2013年1月28日
任何帮助都会非常感激。
答案 0 :(得分: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)
是为了确保你没有收到递归错误),然后我们加入到有问题的表中,并且只有返回该表中缺少的值。