2012-10-04 50 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())) 
相關問題