如何在SQL Server中使用GETDATE()
函数来计算查询执行前一年的日期?我想在查询中使用这个值。如何在SQL Server中使用GETDATE()函数来选择列值?
E.g:
Select LTRating, RHDate
from Accounts and If LTRating ='D' then RHDate = CURRENTDATE()-365
我想检索所有LTRating
列值,其中LTRating
值是“d”和日期是整整一年前。
如何在SQL Server中使用GETDATE()
函数来计算查询执行前一年的日期?我想在查询中使用这个值。如何在SQL Server中使用GETDATE()函数来选择列值?
E.g:
Select LTRating, RHDate
from Accounts and If LTRating ='D' then RHDate = CURRENTDATE()-365
我想检索所有LTRating
列值,其中LTRating
值是“d”和日期是整整一年前。
您可以使用DATEADD,准确INE年前从而访问日期:
dateadd(yy, -1, getdate())
例如
select
LTRating
, case when LTRating = 'D' then dateadd(yy, -1, getdate()) else RHDate end
from Accounts
或者使用DATEDIFF函数:
Select ...
from table
where datediff(Day, RHDate, getdate()) = 365
select LTRating, RHDate
from Accounts
where datediff (yy, RHDate, getdate()) = 1
使用datediff
功能,可以在几个月甚至几年
select * from yourtable where RHDate = DATEADD(yy,-1,getdate())
select [LTRating], [RHDate] from [Accounts]
where [LTRating] = 'D' AND [RHDate] >= DATEADD(year, -1, GETDATE())
添加-1到当前的年份获得差异日期基本上只是反转函数d ateadd因为没有dateminus :)
就是懒得打字。 – Juvil
下面的语句返回
LTRating
是不是 'd';和LTRating
值是“d”和RHDate
是正好一年;或LTRating
值为'D'且RHDate
为年龄大于一年; ORLTRating
值为'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类型包括时间分量(人至少到第二),因此,在大多数的情况下,日期时间列的比较完成使用>
或<
运营商。
Select LTRating, RHDate
from Accounts
where LTRating <> 'D'
OR (LTRating ='D' and RHDate = DATEADD(year, -1, GETDATE()))
这是不准确的,闰年有366,而其余的都是365 – Juvil
真的,我只是想表明另一个功能:) – ulath
那么你可以只使用'GETDATE() - 365',它有同样的问题闰年是366 –