Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL在提供范围列表时获取日期范围中的间隔_Sql_Sql Server_Date - Fatal编程技术网

SQL在提供范围列表时获取日期范围中的间隔

SQL在提供范围列表时获取日期范围中的间隔,sql,sql-server,date,Sql,Sql Server,Date,我目前正在寻找以下问题的SQL解决方案: 作为指导: 我有一个不可为空的开始日期和结束日期的列表。根据这个列表,我需要给定开始日期和结束日期之间的总间隔时间 基于SQLFiddle 如果我的数据库中只有情况1,结果应该是2天。 如果我的数据库中有情境2和情境3,结果应该是1天 我已经思考了好几天了。。。任何帮助都将不胜感激 问候,, 基尔 注意:我正在运行SQL 2012(如果需要任何特殊的新功能)最好的解决方案是创建“日期”表并从那里开始,否则解决方案将无法维护。对于指定范围内的每个日期,您可

我目前正在寻找以下问题的SQL解决方案:

作为指导:

我有一个不可为空的开始日期和结束日期的列表。根据这个列表,我需要给定开始日期和结束日期之间的总间隔时间

基于SQLFiddle

如果我的数据库中只有情况1,结果应该是2天。 如果我的数据库中有情境2和情境3,结果应该是1天

我已经思考了好几天了。。。任何帮助都将不胜感激

问候,, 基尔


注意:我正在运行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) 
  )