0

如何使用GETDATE()SQL Server 中的函数来计算执行查询前一年的日期?我想在查询中使用这个值。

例如:

 Select LTRating, RHDate 
 from Accounts and If LTRating ='D' then RHDate = CURRENTDATE()-365

我希望检索值为“D”且日期正好是一年前的所有LTRating列值。LTRating

4

7 回答 7

2

您可以使用DATEADD并访问恰好在一年前的日期:

dateadd(yy, -1, getdate())

例如

select 
LTRating
, case when LTRating = 'D' then dateadd(yy, -1, getdate()) else RHDate end
from Accounts
于 2012-10-04T09:34:53.500 回答
0
Select LTRating, RHDate 
from Accounts 
where LTRating <> 'D' 
OR (LTRating ='D' and RHDate = DATEADD(year, -1, GETDATE()))
于 2012-10-04T10:19:39.127 回答
0
select  LTRating, RHDate 
from Accounts 
where datediff (yy, RHDate, getdate()) = 1

通过使用datediff函数可以获得月份和年份的差异

于 2012-10-04T09:44:49.117 回答
0
select * from yourtable where RHDate = DATEADD(yy,-1,getdate())
于 2012-10-04T09:45:28.240 回答
0

或者使用 datediff 函数:

Select ...
from table
where datediff(Day, RHDate, getdate()) = 365
于 2012-10-04T09:41:24.753 回答
0
select [LTRating], [RHDate] from [Accounts] 
where [LTRating] = 'D' AND [RHDate] >= DATEADD(year, -1, GETDATE())

将 -1 添加到当前日期的年份基本上只是反转函数 dateadd 因为没有 dateminus :)

于 2012-10-04T09:54:41.853 回答
0

以下语句返回

  • 所有LTRating不是“D”的;和
  • 选择以下选项之一:
    • LTRating值为“D”且RHDate正好一年;或者
    • LTRating为“D”且RHDate超过一年的值;或者
    • 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 类型包括时间分量(至少到秒),因此,在大多数情况下,日期时间列比较是使用>or<运算符完成的。

于 2012-10-04T10:00:30.247 回答