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