选择日期不在多个日期范围表中的记录 SQL Server

gen*_*ion 2 sql sql-server date between

我在 SQL Server 中有一个包含各种日期范围的表。

表具有开始日期和结束日期如下:-

start_date                  end_date
=======================     =======================
2011-02-21 00:00:00.000     2011-02-25 00:00:00.000
2011-04-18 00:00:00.000     2011-04-29 00:00:00.000
2011-05-31 00:00:00.000     2011-06-03 00:00:00.000
2011-07-21 00:00:00.000     2011-08-31 00:00:00.000
2011-10-24 00:00:00.000     2011-10-28 00:00:00.000
2011-12-19 00:00:00.000     2012-01-02 00:00:00.000
2012-02-13 00:00:00.000     2012-02-17 00:00:00.000
2012-04-02 00:00:00.000     2012-04-13 00:00:00.000
2012-06-04 00:00:00.000     2012-06-08 00:00:00.000
2012-07-20 00:00:00.000     2012-08-31 00:00:00.000
2012-10-29 00:00:00.000     2012-11-02 00:00:00.000
2012-12-24 00:00:00.000     2013-01-01 00:00:00.000
2013-02-10 00:00:00.000     2013-02-16 00:00:00.000
2013-03-24 00:00:00.000     2013-04-06 00:00:00.000
2013-05-26 00:00:00.000     2013-06-01 00:00:00.000
2013-07-24 00:00:00.000     2013-08-31 00:00:00.000
2013-10-27 00:00:00.000     2013-11-02 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

我需要从另一个表中选择日期戳在上述任何范围中都不存在的记录。

上表中的开始日期和结束日期可能相同,这表示仅排除一天。

我最初的想法是扩展上述范围内的所有日期,然后在其中执行 SELECT WHERE NOT EXISTS IN,或者是否有更有效的方法来实现这一点?

Tim*_*ter 5

SELECT t.* 
FROM AnotherTable t 
WHERE NOT EXISTS(
    SELECT 1 
    FROM TblDate d 
    WHERE d.start_date <= t.DateColumn
    AND   d.end_date   >= t.DateColumn
)
Run Code Online (Sandbox Code Playgroud)

编辑:刚刚看到这是您最初的想法。所以我认为这是最简单和最快的方法。这里有一些关于这个主题的内容:

http://sqlserverperformance.idera.com/tsql-optimization/finding-nonexistent-records-hurry/