2011-07-28 292 views
2

我有隻有一個字段 「起始日期」 的記錄如下SQL查詢(SQL Server)的日期和時間差

** 2011-07-28 19 SQL Server表:30:00.000

2011-07-29 21:50:00.000

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

我想要做的是:

SHOW [R ECORDS如果它的CURRENT DATE(今天的日期)和當前時間之間的差異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(day,StartDate,GETDATE())' - 不會返回過去幾天的負值嗎?用戶是否只需要記錄今天的日期? – Curt

+0

@Curt,它會爲未來的開始返回一個負值。第一個DATEDIFF確保它是同一天(或未來,我不知道爲什麼他把它放在那裏)。我考慮在那裏放置ABS,但海報並不清楚他在找什麼。 –

0

有兩種方法可以做到這一個是則DateDiff另一個是DATEADD。按照我閱讀你的問題的方式來判斷,DateAdd應該這樣做。這是一個例子;

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

使用BETWEEN可能比兩個AND語句(可能不是)更優化一點。如果您不需要,請不要在每一行上進行計算。僅在當前日期執行DATEADD將只計算一次。

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

我解釋了一個問題,尋找行其中的日期爲今日(今之間的開始),但不是最後5分鐘(不到5分鐘前)內。這可能不是你想要的。

希望有幫助