3

特定の関数が最後に実行された日時を含むテーブルがあります。私のストアド プロシージャでは、現在の日付/時刻が最後に実行された時刻から 1 時間以上離れている場合は 1 を返し、1 時間未満の場合は 0 を返します。現在、私はこれを持っています:

IF((SELECT TOP 1 DATEDIFF(HH,LastRunDateTime,GETDATE()) FROM myTable) >= 1)
BEGIN
    -- run statement to update LastRunDateTime
        return 1;
END
ELSE
    return 0;
END

丸めは DateDiff でどのように機能しますか?

1 時間以上経過した場合にのみ 1 を返すより良い方法はありますか?

4

2 に答える 2

2

使用する:

SELECT CASE 
         WHEN DATEDIFF(hh, LastRunDateTime, GETDATE()) >= 1 THEN 1 
         ELSE 0 
       END

参照:

丸めは DateDiff でどのように機能しますか?

提供されたドキュメント リンクのdatepart Boundariesセクションに、そのような情報がリストされています。

于 2010-12-07T20:37:16.467 に答える
1

私はあなたが欲しいと思います

IF DATEADD(hour, LastRunDateTime, 1) <= GETDATE() BEGIN
    RETURN 1;
END;
ELSE BEGIN
    RETURN 0;
END;

DateDiff は、単に 2 つの日時を減算するよりも少し微妙です。実際には、2 つの間でいくつの「境界」が交差しているかがわかります。例えば:

PRINT DATEDIFF(HH, '2010-12-07T03:59:59', '2010-12-07T04:00:00');
PRINT DATEDIFF(HH, '2010-12-07T04:00:00', '2010-12-07T04:59:59');

以下を出力します。

1
0

2 番目の日時のペアが離れているため、これは混乱を招きます。この機能は、必要な場合には優れていますが、必要のない場合には直感的ではありません。

于 2010-12-07T21:12:18.023 に答える