2017-08-28 138 views
1

我希望能够识别网络数据中的日期间隔。例如:SQL Server - 确定日期范围间隙

  • 网络1:12年1月1日(开始) - 2014年12月31日(结束)
  • 网络2:17年1月1日(开始) - 12/31/9999(端)

在上面的例子有在多年网络1的结束日期和网络2开始日期之间的间隙2015和2016

+0

你的预期结果是什么? –

+0

由于这是SQL,因此您试图在查询上创建表格模式。为什么网络2有12/31/9999作为日期。您可以简单地将其保留为未定义(即未定义的上限) – Acewin

+0

此堆栈溢出问题是否可以解决您的问题? https://stackoverflow.com/questions/9604400/sql-query-to-show-gaps-between-multiple-date-ranges – bbrumm

回答

0

你需要具有离散值,以便能够比较日期和找到差距。由于datetime不在感天比较谨慎(你有小时,分钟和秒),你可能会想创建日历表,是这样的:

|date  | 
|----------| 
|01-01-2000| 
|01-02-2000| 
|01-03-2000| 
... 
12-31-2050 

我怀疑你将需要填写它,直到年份9999.

日历表可以包含日期,月份或年份,具体取决于您的要求。

有了这样的表格之后,您可以将日历表格与数据表格结合起来,根据您的标准找到差距。喜欢的东西:

SELECT date, table.id 
FROM calendar 
LEFT JOIN table on calendar.date BETWEEN table.start_date AND table.end_date 
WHERE table.id IS NULL 

这是一个基本假设的例子,因为你还没有提供有关表和查询的全部信息,但你可以在它的工作,以获得您想要的结果。