Sql server 两个日期时间记录集之间的tsql intesect

Sql server 两个日期时间记录集之间的tsql intesect,sql-server,tsql,date,intersect,gaps-and-islands,Sql Server,Tsql,Date,Intersect,Gaps And Islands,我有一个预约表,其中有许多“资源”的预约 我需要做的是查询并返回某个特定资源在某个日期范围内的所有免费约会时段 我认为最好的方法是生成一个可能的预约时间临时表,因为预约时间可能是30/60/90分钟——预约时间将为查询指定。然后选择这两个记录集的交点。i、 e.所有这些——在日期范围内——在预约表中没有预约。从而返回该资源的所有可能约会 或者,也许只是——再一次——生成可能的约会日期时间记录,然后除了已经预订的实际约会 当然,除非有人能提出一个更简单的选择 还不完全确定如何生成可能的表格,即包含

我有一个预约表,其中有许多“资源”的预约 我需要做的是查询并返回某个特定资源在某个日期范围内的所有免费约会时段

我认为最好的方法是生成一个可能的预约时间临时表,因为预约时间可能是30/60/90分钟——预约时间将为查询指定。然后选择这两个记录集的交点。i、 e.所有这些——在日期范围内——在预约表中没有预约。从而返回该资源的所有可能约会

或者,也许只是——再一次——生成可能的约会日期时间记录,然后除了已经预订的实际约会

当然,除非有人能提出一个更简单的选择

还不完全确定如何生成可能的表格,即包含1小时约会的2010-12-08 09:00、2010-12-08 10:00等记录的表格

有什么想法吗

编辑:对可能发生的事情有一个模糊的想法

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

这是一个典型的缺口和孤岛问题。它本质上是一个常见的问题,您需要识别序列中缺少的值。幸运的是,曼宁的书《SQLServerMVP深度潜水》中有一章免费介绍了这个主题。希望它能提供灵感,为一些可能的方法提供指导

以下是伊兹克·本·甘对这个问题的描述,引自上一章

差距和岛屿问题涉及 序列中缺少值 ... 所涉及的序列也可以 可以是时间性的,例如订单日期,一些 由于不活动而丢失的 周末,假期。发现 不活动的时期就是一个例子 差距问题,以及寻找周期 活动的定义就是一个例子 岛屿问题