【发布时间】:2011-05-22 03:02:30
【问题描述】:
我有一个约会表,其中包含许多“资源”的约会 我需要做的是查询并返回(针对特定资源)一个日期范围内的所有免费预约空档。
我认为解决此问题的最佳方法是生成可能的约会时间的临时表(因为约会的长度可能是 30/60/90 分钟 - 将为查询指定约会长度。)和然后选择这两个记录集的交集。即所有这些 - 在日期范围内 - 约会表中没有约会。从而返回该资源的所有可能约会。
或者也许只是 - 再次 - 生成可能的约会日期时间的记录,然后除了已经预订的实际约会......?
当然,除非有人可以提出更简单的选择。?
也不完全确定如何生成可能的表格,即包含2010-12-08 09:00, 2010-12-08 10:00, 等记录的表格(对于 1 小时的约会)...
有什么想法吗?
编辑:对可能性有一个模糊的想法......
DECLARE @startDate DateTime
DECLARE @EndDate DateTime
set @startDate = '2010-12-08 09:00'
set @endDate = '2010-12-11 09:00';
with mycte as
(
select cast(@startDate as datetime) DateValue
union all
select dateadd(mi,30,DateValue)
from mycte
where DateValue <= @endDate
and datepart(hh, dateadd(mi,30,DateValue)) Between 9 AND 16
)
select DateValue
from mycte
【问题讨论】:
标签: sql-server tsql date intersect gaps-and-islands