SQL Server Management Studio计算年龄

时间:2016-07-27 02:16:22

标签: sql sql-server ssms formula

我在SSMS中创建了一个表,它包含以下字段:

  • NAME varchar(50)
  • BIRTHDATE date
  • 年龄小数(3,0)

我想在表设计器中使用AGE字段的公式,根据他们的BIRTHDATE和当前日期来计算人的年龄。

例如,NAME =' Joe Blow'和BIRTHDATE =' 1/1/207'。我希望AGE能够计算出这个并返回“46”的年龄。

1 个答案:

答案 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)
        )