SQL Server 计算一个人在过去某个时间的年龄的有效方法是什么?[duplicate]

bq9c1y66  于 2023-02-07  发布在  其他
关注(0)|答案(3)|浏览(105)
    • 此问题在此处已有答案**:

(39个答案)
3天前关闭。
我试图计算一个人在过去某个特定日期的年龄;在本例中,我们就说"02 - 01 - 2020"。
我有这样的东西:

SELECT person.name,
 CASE
   WHEN DATEADD(YEAR, DATEDIFF(YEAR, person.birthdate, '02-01-2020'), person.birthdate) < '02-01-2020'
   THEN DATEDIFF(YEAR, person.birthdate, '02-01-2020')-1
   ELSE DATEDIFF(YEAR, person.birthdate, '02-01-2020')
 END AS calculated_age,
FROM   PersonTable
[...]

我不认为这适用于"02 - 01 - 2020"之后的潜在生日,我想知道是否有更好的方法来做到这一点?

fumotvh3

fumotvh31#

我在当前的项目中使用这种方法

DECLARE @Date DATETIME = '2020-02-01' 

select DATEDIFF(YEAR,person.birthDate, @Date) - 
  CASE WHEN DATEADD(YEAR, DATEDIFF(YEAR, person.birthDate, @Date), person.birthDate) > @Date THEN 1 ELSE 0 END
zmeyuzjn

zmeyuzjn2#

我会得到两个日期之间的天数差,然后将这个数字除以365. 25,考虑到闰年。

SELECT person.name,
    FLOOR(DATEDIFF(DAY, person.birthdate, '02-01-2020') / 365.25) AS calculated_age,
FROM   PersonTable
[...]

如果您在其他计算中使用这些结果,则由于年份的小数部分,这可能会导致一些不准确。

xpcnnkqh

xpcnnkqh3#

下面是另一种获得所需结果的方法:

SELECT (CAST(FORMAT(CAST('02-01-2020' AS datetime2),'yyyyMMdd') AS int) - CAST(FORMAT(CAST(person.birthdate AS datetime2),'yyyyMMdd') AS int))/10000 AS calculated_age
FROM PersonTable

相关问题