我只看到了作爲參數傳遞的DOB中SQL計算的年齡。我將如何從已存儲的DOB中執行此操作,因爲date
類型?從出生日期確定年齡
我認爲這會工作,但儘管從2000年有DOBS它不返回行 - 2006年
Select DateDiff(YEAR, dob, CURRENT_TIMESTAMP) as ageYears
from users
我只看到了作爲參數傳遞的DOB中SQL計算的年齡。我將如何從已存儲的DOB中執行此操作,因爲date
類型?從出生日期確定年齡
我認爲這會工作,但儘管從2000年有DOBS它不返回行 - 2006年
Select DateDiff(YEAR, dob, CURRENT_TIMESTAMP) as ageYears
from users
在歲的年齡稍微複雜一些,因爲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月。大多數人認爲多年來這個年齡的答案是錯誤的。
是的,這個看起來很完美。 SQL小提琴在這裏:http://sqlfiddle.com/#!3/62670/1 –
我刪除了我的答案,因爲我注意到我有這個錯誤,你稍後解釋。 –
我可能只是將CURRENT_TIMESTAMP更改爲GetDate()以符合標準。 –
沒有'WHERE'子句,因此查詢應該返回與'用戶'中的行一樣多的行。如果你沒有行,那麼我能想到的唯一解釋就是'users'是空的。 –
啊哈,我沒有提到正確的表格。我有多個具有相同表名的數據庫! Doh – Lee
@李達明的回答是OK。如果你沒有行,你在其他地方有問題,而不是計算年齡的邏輯(正確的計算年數)。 –