我只看到过来自作为参数传递的DOB的SQL计算年龄。我将如何从已存储的DOB作为date
类型执行此操作?
我认为这会有效,但尽管有2000年至2006年的DOB,但它不会返回任何行。
Select DateDiff(YEAR, dob, CURRENT_TIMESTAMP) as ageYears
from users
答案 0 :(得分:2)
多年的年龄稍微复杂,因为DATEDIFF
计算边界过渡(新年前夕 - >新年日) 1 。
这应该给出正确答案:
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
1 这意味着更简单的DateDiff(YEAR, dob, CURRENT_TIMESTAMP)
将为2013年12月31日出生的人提供1的答案,对于2014年1月1日的查询。大多数人认为是这个年龄的错误答案。