2012-10-04 55 views

回答

2

您可以使用DATEADD,准确INE年前从而访问日期:

dateadd(yy, -1, getdate()) 

例如

select 
LTRating 
, case when LTRating = 'D' then dateadd(yy, -1, getdate()) else RHDate end 
from Accounts 
0

或者使用DATEDIFF函数:

Select ... 
from table 
where datediff(Day, RHDate, getdate()) = 365 
+0

这是不准确的,闰年有366,而其余的都是365 – Juvil

+0

真的,我只是想表明另一个功能:) – ulath

+0

那么你可以只使用'GETDATE() - 365',它有同样的问题闰年是366 –

0
select LTRating, RHDate 
from Accounts 
where datediff (yy, RHDate, getdate()) = 1 

使用datediff功能,可以在几个月甚至几年

0
select * from yourtable where RHDate = DATEADD(yy,-1,getdate()) 
0
select [LTRating], [RHDate] from [Accounts] 
where [LTRating] = 'D' AND [RHDate] >= DATEADD(year, -1, GETDATE()) 

添加-1到当前的年份获得差异日期基本上只是反转函数d ateadd因为没有dateminus :)

+0

就是懒得打字。 – Juvil

0

下面的语句返回

  • 所有LTRating是不是 'd';和
  • 选择下列之一:
    • LTRating值是“d”和RHDate正好一年;或
    • LTRating值为'D'且RHDate年龄大于一年; OR
    • LTRating值为'D'且RHDate年轻人一年。
SELECT LTRating, RHDate 
FROM Accounts 
WHERE (LTRating != 'D' 

    -- use this for exact comparison (including seconds!) 
    OR RHDate = DATEADD(YEAR, -1, GETDATE()) 

    -- use this for RHDate older than one year 
    OR RHDate < DATEADD(YEAR, -1, GETDATE()) 

    -- use this for RHDate younger than one year 
    OR RHDate > DATEADD(YEAR, -1, GETDATE()) 

); 

请记住,DATETIME和SMALLDATETIME类型包括时间分量(人至少到第二),因此,在大多数的情况下,日期时间列的比较完成使用><运营商。

0
Select LTRating, RHDate 
from Accounts 
where LTRating <> 'D' 
OR (LTRating ='D' and RHDate = DATEADD(year, -1, GETDATE())) 
相关问题