我在SSMS中创建了一个表,它包含以下字段:
我想在表设计器中使用AGE字段的公式,根据他们的BIRTHDATE和当前日期来计算人的年龄。
例如,NAME =' Joe Blow'和BIRTHDATE =' 1/1/207'。我希望AGE能够计算出这个并返回“46”的年龄。
答案 0 :(得分:0)
这有点棘手。很有诱惑力:
select datediff(year, birthdate, getdate())
但是,这会计算两个日期之间的年边界数(1月1日)。那不是时代。
获得实际年龄的一种方法是从每个值中减去当年的当前日期。这种规范化应该有效:
select datediff(year,
dateadd(day, 1 - datepart(dy, birthdate), birthdate),
dateadd(day, 1 - datepart(dy, birthdate), getdate())
)
即使这在闰年可能会有一个微妙的逐个错误。所以,你可以使用蛮力:
select (datediff(year, birthdate, getdate()) -
(case when datepart(month, birthdate) * 100 + datepart(day, birthdate) >
datepart(month, getdate()) * 100 + datepart(day, birthdate)
then 1 else 0
end)
)