【发布时间】:2017-04-06 07:31:53
【问题描述】:
我有以下 SQL,我希望在以下日期中有空缺。
declare @startdate datetime = '2017-05-01'
declare @enddate datetime = '2017-05-25'
create table #tmpdates (id int, date1 datetime, date2 datetime, rate int)
insert into #tmpdates values (1, '2017-05-05', '2017-05-15', 10)
insert into #tmpdates values (2, '2017-05-16', '2017-05-18', 12)
insert into #tmpdates values (3, '2017-05-21', '2017-05-25', 15)
select * from #tmpdates where date1 >= @startdate and date2 <= @enddate
drop table #tmpdates
所以输出应该包含 2017-05-01 到 2017-05-04 和 2017-05-19 到 2017-05-20 - 还有 2 条记录。
Output:
1 5/1/2017 0:00 5/4/2017 0:00 NO DATA
2 5/5/2017 0:00 5/15/2017 0:00 10
3 5/16/2017 0:00 5/18/2017 0:00 12
4 5/19/2017 0:00 5/20/2017 0:00 NO DATA
5 5/21/2017 0:00 5/25/2017 0:00 15
在我上面的查询中,只返回日期范围记录。请指导或者我如何也包括这些?
【问题讨论】:
-
我真的很难理解你想在这里实现什么。你能再解释一下吗?
-
OP 有一个开始日期和一个结束日期,还有一个包含日期范围的表格。他想找到表格中不存在的开始日期和结束日期之间的范围。
-
@Tanner 这还不够。为什么是 1-4 和 19-20 而不是 17 和 21-24?
-
@tanner - 谢谢,为我做的 :)
-
阅读:stackoverflow.com/questions/7812986/… 它描述了如何为
@StartDate和@EndDate之间的所有日期生成行。一旦你有了这个LEFT JOIN有间隙的表。
标签: sql-server tsql sql-server-2012