2013-10-30 125 views
1

我在查詢中發現了以下行,無論我考慮多少種方式,我都不明白它的意圖是什麼......請你幫我理解爲什麼這會出現在where子句中以及它如何讀取僞代碼?這條線說什麼/做什麼?

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

我認爲它只是將'upvHD.PropertyVal'的年份部分設置爲當年,而不會影響'month'和'date'部分。 –

回答

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