0

整数値を含む2つの列を含む1つのテーブルがあります

1- int としての StartTime 2-int としての EndTime

ここで、現在の時間の時間の値をこれらの時間と比較する必要があります。

Current time の時間値が starttime より大きく、Current time の時間値が Endtime IN 24HOURS FORMATより小さい場合、クエリを実行しています。

今問題です。

StartTime = 19 および Endtime = 7 (朝) の場合

現在の時間の値が 20 を返す場合

次に、20 > 19 は true ですが、20<7 この値は false になります....

20 時は夕方 7 時から朝 7 時の間に来ています...しかし、このクエリは偽の例外を取得しています...

これについて私を助けてください.....

皆様には大変お世話になりました.....

繰り返しますが、この問題について詳しく説明しています

DATEPART(hh,GETDATE()) --- この関数は 1 時間の値を返します

8:00:00PM のように、これはちょうど 20 を返します

私のテーブルでは、開始時刻と終了時刻を整数値として保存しました

starttime のように - 19 endtime - 7

これで、20 は次のような両方の値と比較されます

20 > 19 ---- 真 20 < 7 ----- これは偽になる

しかし、私のシナリオによれば、夜8時と朝7時をチェックしているので、正しくなるはずです......夜8は夜7と朝7の間に来ます(これは私が開始時間と終了時間で定義したものです)

4

3 に答える 3

1
DECLARE @current_Hour INT
SELECT @current_hour = DATEPART(HH,GETDATE())
--SELECT @current_hour = 20

DECLARE @startTime INT
SET @startTime = 19
DECLARE @endtime INT
set @endTime = 7

SELECT 
    CASE 
        WHEN @startTime <= @endTime THEN 
            CASE WHEN @current_hour BETWEEN @startTime AND @endtime THEN 1 ELSE 0 END
        ELSE
            CASE WHEN @current_hour BETWEEN @endtime AND @startTime THEN 0 ELSE 1 END
    END     
于 2013-05-17T08:56:11.823 に答える
0

日付データがなく、CurrentTime が StartTime よりも大きく、EndTime が StartTime よりも小さい場合、EndTime は 24+EndTime に等しいと考えることができます (または EndTime 検証を無視できます)。問題を説明する必要があります。

日付が重要でない場合

WHERE
(
    @CurrentTime > StartTime 
    AND StartTime > EndTime
)
OR
(
    @CurrentTime > StartTime 
    AND StartTime < EndTime
    AND @CurrentTime < EndTime
)
于 2013-05-17T08:17:54.680 に答える
0

解決策は非常に簡単です。

@Date > StartTime
AND (
    @Date < EndTime
OR
    EndTime < Startime
)

@Date が「翌日の朝」でもある場合、それは (そして何も) 機能しないことに注意してください。

于 2013-05-17T08:49:20.810 に答える