我在查询中找到了以下一行,无论我怎么想它,我都不明白它的目的是什么......请你帮我理解为什么这会在哪里子句以及它如何读取伪代码?
DATEADD(year,
DATEDIFF(year, Convert(datetime,upvHD.PropertyVal), GETDATE()),
Convert(datetime,upvHD.PropertyVal)
) > GETDATE()
答案 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
。