2011-07-28 18 views
2

私が唯一のフィールドを持つSQL Serverテーブルを持っている "開始日"SQLクエリ(SQL Serverなど)日付と時刻の差

が 2011-07-28 19 **次のように記録がある:30:00.000

2011-07-29 21:50:00.000

2011-07-25 09:20:00.000 **

私は何をしたいことは次のとおりです。

SHOWのR ECURDSの現在の日付(今日の日付)とStartDateの現在の時間との差が5分未満でない場合、次のコードを書いていますが、時間差を表示していませんか?

についてどのように
SELECT * FROM table WHERE DATEDIFF(day, StartDate, GETDATE()) <= 0 

答えて

3
SELECT StartDate 
FROM table 
WHERE YEAR(StartDate)=YEAR(GETDATE()) 
AND MONTH(StartDate)=MONTH(GETDATE()) 
AND DAY(StartDate)=DAY(GETDATE()) 
AND (DATEDIFF(minute, StartDate, GETDATE()) >= 5 
    OR 
    DATEDIFF(minute, StartDate, GETDATE()) <= 5) 
0

SELECT StartDate 
    ,GETDATE() 
    ,DATEDIFF(day, StartDate, GETDATE()) 
    ,DATEDIFF(minute, StartDate, GETDATE()) 
    ,* 
FROM table 
WHERE DATEDIFF(day, StartDate, GETDATE()) <= 0 
    AND DATEDIFF(minute, StartDate, GETDATE()) >= 5 
+0

'DATEDIFF(日、開始日、GETDATE())'役に立てば幸い - 過去日間だろうではないこの戻りマイナス値を?ユーザーは今日のレコードのみを必要としないのですか? – Curt

+0

@Curt、将来の開始時には負の値を返します。最初のDATEDIFFは、それが同じ日であることを保証します(または、将来、私はなぜ彼がそこにそれを置くのか分かりません)。私はそこにABSを置くことを考えましたが、ポスターは彼が探していたものについて明確ではありませんでした。 –

0

一方が他方のDATEADDあるDateDiff関数であること、それを行うには、2つの方法があります。私はあなたの質問DateAddを読む方法で判断する必要があります。ここに例があります。

SELECT * 
    FROM [dbo].[TABLE] 
    WHERE [LAST_UPDATE] > DATEADD(minute,-5,GetDate()) 
0

おそらく、BETWEENを使用する方が2つのAND文よりも少し最適です(多分そうではないかもしれません)。必要がない場合は、各行で計算を行わないようにしてください。現在の日付にのみDATEADDを実行することは1回だけ計算されます。

SELECT 
    whatever 
FROM 
    table 
WHERE 
    StartDate 
     BETWEEN FLOOR(CAST(GETDATE() AS FLOAT)) 
     AND DATEADD(minute, -5, GETDATE()) 

私は(今日の開始の間)の日付が今日ある行を探してではなく、最後の5分以内(未満5分前)として質問を解釈します。それはあなたが行っていたものではないかもしれません。

関連する問題