Sql server sql中日期之间的差异

Sql server sql中日期之间的差异,sql-server,tsql,date,Sql Server,Tsql,Date,我有两列,即enddate和startdate 我需要找到所有那些记录在哪里 (截止日期开始日期)>2年 我尝试使用timediff(enddate,startdate)>2 但它返回的错误是:'timediff'不是可识别的内置函数名 我正在使用SQLServerManagementStudio,有什么帮助吗 我的日期格式是2007-04-16 00:00:00.000尝试使用DateDiff DateDiff(year,enddate,startdate) 请在DateDiff中使用“年”

我有两列,即enddate和startdate 我需要找到所有那些记录在哪里

(截止日期开始日期)>2年

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

但它返回的错误是:'timediff'不是可识别的内置函数名

我正在使用SQLServerManagementStudio,有什么帮助吗


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

尝试使用
DateDiff

DateDiff(year,enddate,startdate)

请在DateDiff中使用“年”

 DATEDIFF(year, startdate, enddate) > 2
有关更多信息,请查看下面的链接


这应该返回年数:

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


编辑:重复,我没有看到Jayesh Goyani的答案,对不起

我会使用
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;

根据评论中的讨论,您最好使用start datetime和dateAdd函数建立阈值日期。这将为您提供所有记录,其中结束时间在开始日期两年后的同一日历日期(月、月日)上的日期时间之后

Where endDate > dateadd(year, 2, startDate)

截至我撰写本文时,DATEDIFF在这种情况下不能正常工作。实际上,它根本不能正常工作,任何人都不应该使用它

以身作则

    DATEDIFF(YEAR, '2016-08-28', '2017-04-28')
返回1,尽管它已一年了。它只是减去年份,不考虑月份或天数


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

您使用的是哪种sql?数据库和版本Microsoft sql server management studio 10.0.5500。0@Naga:这是您的客户端软件,它没有告诉我们您使用的是哪个版本的SQL Server。两年是什么意思?2010年1月1日至2011年12月31日是否只有一年?2010年12月31日至2012年1月1日是否为两年?还是说24个月?或者,您是指日历日到日历日?datediff函数的所有变体都是计算从一个日期到另一个日期必须跨越的日期边界数。2010年12月31日到2011年1月1日只有一天,但是
datediff(year,'Dec 31 2010,'1jan 2011')
将返回一年mysql有ADDDATE而不是dateadd谁说这是mysql?这不是mysql但MSSQLSQL这仍然会给我记录,差异不到2年为什么
enddate>dateadd(year,2,startdate)
?mi代表什么?@Naga它的意思是分钟我想要一个以年为单位的差异,如果我使用您的命令DateDiff(mi,enddate,startdate)>2,它仍然在给我差异小于2年的记录,因此将其更改为
year
我以为您想计时而不是年份:)@Naga这将不会找到差异为2年或以上的行,这将找到enddate年份和startdate年份之间相差超过2年的行
Where endDate > dateadd(year, 2, startDate)
    DATEDIFF(YEAR, '2016-08-28', '2017-04-28')