2014-04-30 33 views
-1

我有一個計算列,計算出一個人的年齡。我有如下:SQL年齡計算列總是+1不正確

DATEDIFF(year,[DOB],COALESCE([DOD], GETDATE()) 

所以,如果人是活它的作品了目前的年齡從出生日期,如果他們去世它的工作原理它基於國防部和DOB。

但是目前給出的數值並不正確,大多數情況下報告爲+1。

任何人都可以提供任何建議如何解決這個問題?

的樣本數據:在所有三個實例enter image description here據悉+1

感謝

+0

請問您能提供樣品數據嗎?這很可能是由於四捨五入。 –

回答

4

datediff()可能不會做你真正想要的。正如documented,它計算兩個值之間的「週期中斷」的數量。所以,根據這個函數,2013-12-31和2014-01-01相隔一年。這可能是足夠接近

一種方法是切換到月:

DATEDIFF(month, [DOB], COALESCE([DOD], GETDATE())/12 

或者,也許幾天都夠用:

DATEDIFF(day, [DOB], COALESCE([DOD], GETDATE())/365.25 

更準確的解決方案是增加估計年到原始日期。如果晚於當前日期,則減1:

datediff(year, dob, COALESCE([DOD], GETDATE())) + 
    (case when dateadd(year, datediff(year, dob, COALESCE([DOD], GETDATE())), dob) > COALESCE([DOD], GETDATE()) 
      then -1 else 0 
    end) 

Here是一個SQL小提琴示例。

+0

作品一種享受。非常感謝。 – Tommy