我有一个SQL SERVER表,它只有一个字段“StartDate”,记录如下
** 2011-07-28 19:30:00.000
2011-07-29 21:50:00.000
2011-07-25 09:20:00.000 **
我想做的是:
显示记录如果它的当前日期(今天的日期)和当前时间之间的时间差不小于5分钟,我写了下面的代码,但它没有显示我的时差?
SELECT * FROM table WHERE DATEDIFF(day, StartDate, GETDATE()) <= 0
答案 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)
答案 1 :(得分: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
答案 2 :(得分:0)
有两种方法可以做到这一点,一种是DateDiff,另一种是DATEADD。从我阅读你的问题的方式判断DateAdd应该这样做。这是一个例子;
SELECT *
FROM [dbo].[TABLE]
WHERE [LAST_UPDATE] > DATEADD(minute,-5,GetDate())
答案 3 :(得分:0)
使用BETWEEN可能比两个AND语句(可能不是)更优化。如果不需要,请尽量不对每一行进行计算。仅在当前日期执行DATEADD只会计算一次。
SELECT
whatever
FROM
table
WHERE
StartDate
BETWEEN FLOOR( CAST( GETDATE() AS FLOAT ) )
AND DATEADD(minute, -5, GETDATE())
我将问题解释为查找日期为今天(今天开始之间)但不是最近5分钟(不到5分钟前)的行。这可能不是你想要的。
希望有所帮助