2010-12-07 18 views
3

特定の機能が実行された最後の日付/時刻を含むテーブルがあります。私のストアドプロシージャでは、現在の日付/時刻が最後に実行された時刻から1時間以上離れていれば1を返し、それよりも少なかった場合は0を返します。現在、私はこれを持っています:DateDiff SQL Serverの丸め

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を返す良い方法はありますか?

+0

存在するとパフォーマンスが向上する可能性があります。より直感的です –

答えて

2

用途:

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

参考:

がどのようにDateDiff関数で仕事を丸めていますか?

日付部分の境界には、このような情報が記載されています。

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 

。この機能は必要なときには優れていますが、そうでないときは直観に反します。

関連する問題