如何找到当前时间段与任何表字段匹配?

时间:2012-07-27 11:04:04

标签: sql sql-server tsql datetime

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

TimeSlot1, TimeSlot2, .....TimeSlot34 

出现34个时段

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

如何获取与当前时段匹配的记录,例如下午3:30至下午4:00(需要从GETDATE()DATEDIFF构建)

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

当前查询

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

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

动态SQL?

2 个答案:

答案 0 :(得分:2)

试试这个:

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

此查询将提供当前时隙编号,从7-7:30 AM开始作为TimeSlot 1

答案 1 :(得分:1)

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