这条线说什么/做什么?

时间:2013-10-30 07:10:49

标签: sql sql-server-2008 tsql

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

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

1 个答案:

答案 0 :(得分: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