查找缺失的日期范围
表 1
code StartDate EndDate
A 01/01/2011 06/15/2011
A 06/25/2011 06/30/2011
B 01/12/2011 07/31/2011
B 08/3/2011 12/31/2011
表 2
code StartDate EndDate
A 01/01/2011 06/30/2011
B 01/12/2011 07/31/2011
B 08/3/2011 12/25/2011
我需要查找表 1 中的内容而不是表 2 中的内容
code StartDate EndDate
B 12/26/2011 12/31/2011
,而表 2 中的内容而不是表 1 中的内容则相反
code StartDate EndDate
A 06/16/2011 06/29/2011
。日期字段中没有时间组件,首选 T-SQL (SQL Server 2000)。
Table 1
code StartDate EndDate
A 01/01/2011 06/15/2011
A 06/25/2011 06/30/2011
B 01/12/2011 07/31/2011
B 08/3/2011 12/31/2011
Table 2
code StartDate EndDate
A 01/01/2011 06/30/2011
B 01/12/2011 07/31/2011
B 08/3/2011 12/25/2011
I need find what is in Table1 and not in Table2 which is
code StartDate EndDate
B 12/26/2011 12/31/2011
And the Converse of what is in Table2 and not in Table1
code StartDate EndDate
A 06/16/2011 06/29/2011
There is no time component in the date field and T-SQL (SQL Server 2000 ) is preferred.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这在 SQL Server 2000 中有点乏味。它使用数字表将日期范围扩展为单独的行。然后,反半连接的
NOT EXISTS
然后使用我从 MSDN 文章中偷来的“孤岛”方法,将结果再次折叠回范围内。This is a bit tedious in SQL Server 2000. It uses a numbers table to expand out the ranges of dates into individual rows. Then
NOT EXISTS
for the anti semi join then uses an "islands" approach I stole from an MSDN article to collapse the result back into ranges again.