0

我有两列,即 enddate 和 startdate 我需要找到所有这些记录

(结束日期-开始日期)>2 年

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

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

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

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

4

8 回答 8

6

尝试使用DateDiff

DateDiff(year,enddate,startdate)
于 2013-07-30T12:48:26.420 回答
6
WHERE dateadd(year, -2, enddate) > startdate
于 2013-07-30T12:50:54.633 回答
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;
于 2013-07-30T13:01:40.103 回答
2

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

Where endDate > dateadd(year, 2, startDate)
于 2013-07-30T13:11:42.920 回答
2

使用DateDiff

WHERE DATEDIFF(year, startdate, enddate) > 2

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

于 2013-07-30T12:54:17.980 回答
1

请在 DateDiff 中使用“年份”

 DATEDIFF(year, startdate, enddate) > 2

欲了解更多信息,请查看以下链接。

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

于 2013-07-30T12:52:08.067 回答
0

这应该返回年数:

DATEDIFF(year,'2008-06-05','2008-08-05')
于 2013-07-30T12:52:48.800 回答
0

在我写这篇文章的时候, DATEDIFF在这种情况下不能正常工作。实际上,它根本无法正常工作,没有人应该使用它。

例子是;

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

返回 1,尽管还没有一年。它只是减去年数,不考虑月数或天数。

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

于 2017-04-29T02:42:13.923 回答