sql中日期之间的差异

时间:2013-07-30 12:46:51

标签: sql-server tsql date

我有两列,即enddate和startdate 我需要找到所有那些

的记录
  

(enddate-startdate)> 2年

我尝试使用timediff(enddate,startdate)>2

但它返回错误说: 'timediff'不是公认的内置函数名称

我正在使用sql server management studio,有什么帮助?

我的日期格式为2007-04-16 00:00:00.000

8 个答案:

答案 0 :(得分:6)

WHERE dateadd(year, -2, enddate) > startdate

答案 1 :(得分:5)

尝试使用DateDiff

DateDiff(year,enddate,startdate)

答案 2 :(得分:3)

我会使用DATEDIFF。它应该让你在宏观层面上。

DECLARE @orderTracker TABLE (
    orderDate DATE,
    orderShipped DATE,
    orderNum VARCHAR(6)
);


INSERT INTO @orderTracker
        ( orderDate, orderShipped, orderNum )
    VALUES ('01/01/2012', '06/12/2013', '55YY7'),
        ('05/20/2006', '09/10/2008', 'sdlhf8'),
        ('06/02/2011', '10/12/2012', '34JJU'),
        ('11/25/2009', '06/12/2013', '553iSS'),
        ('06/15/2008', '12/12/2011', '5F09U7'),
        ('02/06/2013', '08/12/2013', '55YY7');

SELECT * FROM @orderTracker;

SELECT *
FROM @orderTracker
WHERE DATEDIFF(YEAR, orderDate, orderShipped) >= 2;

答案 3 :(得分:2)

使用DateDiff

WHERE DATEDIFF(year, startdate, enddate) > 2
编辑:重复,我没有看到Jayesh Goyani的答案,抱歉!

答案 4 :(得分:2)

通过评论中的讨论,您最好的选择是使用开始日期时间和日期添加功能建立阈值日期。这将为您提供所有记录,其中结束时间是在同一时间的日期时间之后,在同一日历日期(月份,日期),开始日期后两年。

Where endDate > dateadd(year, 2, startDate)

答案 5 :(得分:1)

请在DateDiff中使用'Year'

 DATEDIFF(year, startdate, enddate) > 2

有关详细信息,请查看以下链接。

http://msdn.microsoft.com/en-us/library/ms189794.aspx

答案 6 :(得分:0)

这应该返回年数:

DATEDIFF(year,'2008-06-05','2008-08-05')

答案 7 :(得分:0)

DATEDIFF确实正确地处理了这种情况。实际上,它根本无法正常工作,没有人应该使用它。

示例;

    DATEDIFF(YEAR, '2016-08-28', '2017-04-28')

返回1,虽然是一年。它只是减去年份而不考虑几个月或几天。

使用DATEADD方法,正如其他人所建议的那样。