SQL在提供范围列表时获取日期范围中的间隔
我目前正在寻找以下问题的SQL解决方案: 作为指导: 我有一个不可为空的开始日期和结束日期的列表。根据这个列表,我需要给定开始日期和结束日期之间的总间隔时间 基于SQLFiddle 如果我的数据库中只有情况1,结果应该是2天。 如果我的数据库中有情境2和情境3,结果应该是1天 我已经思考了好几天了。。。任何帮助都将不胜感激 问候,, 基尔SQL在提供范围列表时获取日期范围中的间隔,sql,sql-server,date,Sql,Sql Server,Date,我目前正在寻找以下问题的SQL解决方案: 作为指导: 我有一个不可为空的开始日期和结束日期的列表。根据这个列表,我需要给定开始日期和结束日期之间的总间隔时间 基于SQLFiddle 如果我的数据库中只有情况1,结果应该是2天。 如果我的数据库中有情境2和情境3,结果应该是1天 我已经思考了好几天了。。。任何帮助都将不胜感激 问候,, 基尔 注意:我正在运行SQL 2012(如果需要任何特殊的新功能)最好的解决方案是创建“日期”表并从那里开始,否则解决方案将无法维护。对于指定范围内的每个日期,您可
注意:我正在运行SQL 2012(如果需要任何特殊的新功能)最好的解决方案是创建“日期”表并从那里开始,否则解决方案将无法维护。对于指定范围内的每个日期,您可以检查它是否被“dateranges”表中的范围覆盖,并获得未覆盖日期的计数 大概是这样的:
SELECT COUNT(*)
FROM
Dates d
WHERE
d.Date BETWEEN @start AND @end
AND NOT EXISTS
(SELECT *
FROM dateranges r
WHERE d.date BETWEEN r.startdate and ISNULL(r.enddate, d.date)
)
您需要
日期范围中每行的重叠天数吗?不,我只需要间隔,不需要重叠。在给定的范围列表中找不到日期的给定范围之间的天数。你有一个包含所有可能日期的表吗?不,我的意思是像dates表一样,每天都有一条记录。不,我想这必须是动态生成的。对不起,这不是我要找的。这包括日期的顺序记录,而不是日期范围。那篇文章对你有帮助吗?
SELECT COUNT(*)
FROM
Dates d
WHERE
d.Date BETWEEN @start AND @end
AND NOT EXISTS
(SELECT *
FROM dateranges r
WHERE d.date BETWEEN r.startdate and ISNULL(r.enddate, d.date)
)