我有两列,即enddate和startdate 我需要找到所有那些
的记录(enddate-startdate)> 2年
我尝试使用timediff(enddate,startdate)>2
但它返回错误说: 'timediff'不是公认的内置函数名称
我正在使用sql server management studio,有什么帮助?
我的日期格式为2007-04-16 00:00:00.000
答案 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
有关详细信息,请查看以下链接。
答案 6 :(得分:0)
这应该返回年数:
DATEDIFF(year,'2008-06-05','2008-08-05')
答案 7 :(得分:0)
DATEDIFF确实不正确地处理了这种情况。实际上,它根本无法正常工作,没有人应该使用它。
示例;
DATEDIFF(YEAR, '2016-08-28', '2017-04-28')
返回1,虽然不是一年。它只是减去年份而不考虑几个月或几天。
使用DATEADD方法,正如其他人所建议的那样。