我有一個計算列,計算出一個人的年齡。我有如下:SQL年齡計算列總是+1不正確
DATEDIFF(year,[DOB],COALESCE([DOD], GETDATE())
所以,如果人是活它的作品了目前的年齡從出生日期,如果他們去世它的工作原理它基於國防部和DOB。
但是目前給出的數值並不正確,大多數情況下報告爲+1。
任何人都可以提供任何建議如何解決這個問題?
的樣本數據:在所有三個實例據悉+1
感謝
我有一個計算列,計算出一個人的年齡。我有如下:SQL年齡計算列總是+1不正確
DATEDIFF(year,[DOB],COALESCE([DOD], GETDATE())
所以,如果人是活它的作品了目前的年齡從出生日期,如果他們去世它的工作原理它基於國防部和DOB。
但是目前給出的數值並不正確,大多數情況下報告爲+1。
任何人都可以提供任何建議如何解決這個問題?
的樣本數據:在所有三個實例據悉+1
感謝
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小提琴示例。
作品一種享受。非常感謝。 – Tommy
請問您能提供樣品數據嗎?這很可能是由於四捨五入。 –