2

DailyAvailability テーブルに 34 個のブール フィールドがあります

TimeSlot1, TimeSlot2, .....TimeSlot34 

34タイムスロット対応

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

現在のタイムスロットと一致するレコードを取得するにはどうすればよいですか 3:30PM-4:00PM (からGETDATE()またはで構築する必要がありますDATEDIFF)

問題は、TimeSlot1 が単純なブール フィールドであり、実際に時間にマップされていないことです。

現在のクエリは

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

最後の AND を WHERE 部分に実装するにはどうすればよいですか?

動的 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]

このクエリは、TimeSlot 1 として午前 7 時から 7 時 30 分までの現在のタイム スロット番号を提供します。

于 2012-07-27T11:15:59.127 に答える
1

可能であれば、テーブルのデザインを変更することをお勧めします。お気づきのように、この構造はクエリが困難です。また、柔軟性に欠けます。この特定の問題を解決しても、後でさらに多くの問題が発生するだけです。

于 2012-07-27T11:41:48.083 に答える