【问题标题】:Calculate age of a person in SQL [duplicate]在SQL中计算一个人的年龄[重复]
【发布时间】:2011-07-07 13:09:10
【问题描述】:

可能重复:
How to calculate age in T-SQL with years, months, and days

这似乎很简单,但似乎对我不起作用。我想根据 SQL 中的两个日期计算某人的年龄。

我做了 DATEDIFF(year,Birthdate,ReferenceDate),但它并不总是给我正确的年龄。

例如

DATEDIFF(year,'1981-07-05',2011-07-01') 

给出 30,而它仍然应该是 29。有没有办法做到这一点?

谢谢,

【问题讨论】:

标签: sql sql-server-2005 date


【解决方案1】:

试试这个...

SELECT CASE WHEN
 (DATEADD(year,DATEDIFF(year, @datestart  ,@dateend) , @datestart) > @dateend)
THEN DATEDIFF(year, @datestart  ,@dateend) -1
ELSE DATEDIFF(year, @datestart  ,@dateend)
END

它只是比较年份差异,如果大于则减去一年,否则返回值。

【讨论】:

    【解决方案2】:
    声明@Date1 日期时间 声明@Date2 日期时间 选择 @Date1 = '07/25/1984' 选择@Date2 = GetDate() 选择案例 当 dateadd(year, datediff (year, @Date1, @Date2), @Date1) > @Date2 THEN datediff (year, @Date1, @Date2) - 1 ELSE datediff (year, @Date1, @Date2)END as Age

    【讨论】:

    • SELECT DATEDIFF(yy, BirthDate, GETDATE()) - CASE WHEN MONTH(BirthDate) > MONTH(GETDATE()) 或 (MONTH(BirthDate) = MONTH(GETDATE()) 和 DAY(BirthDate ) > DAY(GETDATE())) THEN 1 ELSE 0 END AS Age;
    【解决方案3】:

    试试这个

    select
        (datediff(yy,'1981-07-08',getdate()))-(datepart(yy,(convert(datetime,convert(int,dateadd(yy,datediff(yy,'1981-07-08',getdate()),'1981-07-08'))-convert(int,dateadd(yy,-1,getdate())))))-1900)
    

    【讨论】:

      猜你喜欢
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      • 2010-10-01
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多