SQL QUERY(SQL SERVER)日期&时间差异

时间:2011-07-28 10:46:05

标签: sql-server sql-server-2005 tsql

我有一个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

4 个答案:

答案 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分钟前)的行。这可能不是你想要的。

希望有所帮助