1

我在查询中找到了以下行,无论我有多少想法,我都不明白它的目的是什么......请你帮我理解为什么这会在 where 子句中以及如何它读入伪代码?

      DATEADD(year,              
             DATEDIFF(year, Convert(datetime,upvHD.PropertyVal), GETDATE()),
             Convert(datetime,upvHD.PropertyVal) 
             ) > GETDATE()
4

1 回答 1

5

表达方式

DATEADD(year,              
         DATEDIFF(year, Convert(datetime,upvHD.PropertyVal), GETDATE()),
         Convert(datetime,upvHD.PropertyVal) 
         )

正在获取存储的任何日期,PropertyVal并将该日期的年份部分重置为与当前年份相同。

然后将其与当前日期进行比较。这可以用来检查我们是否已经过了特定日期的周年纪念日。


为了分解它,我们首先有这个表达式:

DATEDIFF(year, Convert(datetime,upvHD.PropertyVal), GETDATE())

它计算从当前日期到当前日期之间发生的年份转换次数(新年前夜 -> 新年)PropertyVal。那么这个表达式:

DATEADD(year,              
         <previous>,
         Convert(datetime,upvHD.PropertyVal) 
         )

将相同的年数添加到PropertyVal.

于 2013-10-30T07:16:36.617 回答