2

我在 DailyAvailability 表中有 34 个布尔字段

TimeSlot1, TimeSlot2, .....TimeSlot34 

对应34个时隙

07:00AM-07:30AM, 07:30AM-08:00AM, .... , 11:30PM-12:00PM

如何获取与当前时间段匹配的记录,例如 3:30PM-4:00PM(需要从GETDATE()或 with构建它DATEDIFF

问题是 TimeSlot1 是简单的布尔字段,没有实际映射到时间。

当前查询是

SELECT *
FROM DailyAvailability  
WHERE Present  = 1 
    AND AvailDate = LEFT(CONVERT(VARCHAR(20), GETDATE(),120),10) 
    AND ... // TimeSlotX = 1

如何在 WHERE 部分实现最后一个 AND?

动态SQL?

4

2 回答 2

2

试试这个:

select  (((datepart(HOUR,getdate())-6)*2)-1)+
         case when datepart(MI,getdate())>30 then 1 
              else 0 end [timeSlot_number]

此查询将给出当前时隙编号,从上午 7 点到 7:30 开始作为 TimeSlot 1

于 2012-07-27T11:15:59.127 回答
1

如果可能的话,我建议改变你的桌子设计。正如您所发现的,这种结构很难查询。这也是不灵活的。解决这个特定问题只会在以后导致更多问题。

于 2012-07-27T11:41:48.083 回答