2014-01-08 308 views
0

我只看到了作爲參數傳遞的DOB中SQL計算的年齡。我將如何從已存儲的DOB中執行此操作,因爲date類型?從出生日期確定年齡

我認爲這會工作,但儘管從2000年有DOBS它不返回行 - 2006年

Select DateDiff(YEAR, dob, CURRENT_TIMESTAMP) as ageYears 
from users 
+0

沒有'WHERE'子句,因此查詢應該返回與'用戶'中的行一樣多的行。如果你沒有行,那麼我能想到的唯一解釋就是'users'是空的。 –

+0

啊哈,我沒有提到正確的表格。我有多個具有相同表名的數據庫! Doh – Lee

+0

@李達明的回答是OK。如果你沒有行,你在其他地方有問題,而不是計算年齡的邏輯(正確的計算年數)。 –

回答

2

在歲的年齡稍微複雜一些,因爲DATEDIFF計數的邊界過渡(除夕 - >元旦) 。

這應該給正確答案:

Select DateDiff(YEAR, dob, CURRENT_TIMESTAMP) - 
    CASE WHEN 
     DATEADD(year,DateDiff(YEAR, dob, CURRENT_TIMESTAMP),CURRENT_TIMESTAMP) 
     > CURRENT_TIMESTAMP 
     THEN 1 
     ELSE 0 END as ageYears 
from users 

這將意味着簡單的DateDiff(YEAR, dob, CURRENT_TIMESTAMP)會給出生於2013年12月31日的1對別人的答案,因爲在第一次運行查詢2014年1月。大多數人認爲多年來這個年齡的答案是錯誤的。

+0

是的,這個看起來很完美。 SQL小提琴在這裏:http://sqlfiddle.com/#!3/62670/1 –

+0

我刪除了我的答案,因爲我注意到我有這個錯誤,你稍後解釋。 –

+0

我可能只是將CURRENT_TIMESTAMP更改爲GetDate()以符合標準。 –

相關問題