我有一个预订系统,允许用户预订30分钟的时间段(例如下午1点,下午1点半,下午2点等...)
在sql数据库中,我可能有一个预订上午10点,预订下午1点,两个下午2点。我试图在显示每个插槽当前预订数量的日期时间范围之间显示所有30分钟预订位置的视图。
我没有明确存储每个插槽,因为它效率不高。有没有办法让sql返回'空'单个查询中的时间段?我不想创建时间段数组,然后分别查询每个时间段的预订总数。
我使用sql server和asp.net mvc6作为我的技术基础。关于技术的一些建议将不胜感激。
感谢。
答案 0 :(得分:4)
您需要构建一个30分钟的间隔时间范围表,并使用您的表格left join
来获取所有时间段
此查询从startDate开始生成30分钟的间隔时间,生成总共12个时隙,您可以相应地修改它。
declare @startDate datetime ='2014-01-12 12:00:00'
;with cte(value,nextval,n)
as
(
select CONVERT(VARCHAR(5),@startDate,108) as value,
dateadd(minute, datediff(minute, 0, @startDate)+30, 0) as nextval, 1 as n
union all
select CONVERT(VARCHAR(5),cte.nextval,108) as value,
dateadd(minute, datediff(minute, 0, cte.nextval)+30, 0) as nextval, n+1
from cte
where n <=12
)
select * from cte
left join Table1
on cte.nextval = Table1.timeslotvalue