【发布时间】:2012-02-25 02:44:12
【问题描述】:
我在 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
我需要从另一个表中选择日期戳在上述任何范围内都不存在的记录。
上表中的开始日期和结束日期可能相同,表示只排除一天。
我最初的想法是扩展上述范围内的所有日期,然后执行 SELECT WHERE NOT EXISTS IN,还是有更有效的方法来实现这一点?
【问题讨论】:
-
另一个表是否只存储日期或者是否可以包含时间,这是否相关。例如,您可以在排除表中将“02/02/2012”作为开始和结束,并将值“02/02/2012 12:00”进行比较。在大多数提交的答案中,这不会被排除在外,因此它似乎是一个关键的信息。
-
根据帖子,日期格式如下:2012-12-24 00:00:00.000 看起来所有时间都是 00:00:00.000
标签: sql sql-server date between