根据出生日期计算年龄

时间:2017-03-10 14:03:22

标签: sql

我正在尝试编写一个SQL查询,该查询将根据出生日期为我提供在3个月内满65岁的人的结果。任何帮助,将不胜感激!

在WHERE子句中,我使用以下内容显示了64岁的人的结果,但我不知道如何获得过去3个月

    FLOOR(DATEDIFF(DAY, DOB, GETDATE()) / 365.25) = 64

4 个答案:

答案 0 :(得分:2)

Datediff可能有一些奇怪的效果,我发现自己避免了它。这就是我接近它的方法(在SQL Server / T-SQL上)。

SELECT
    p.*
FROM
    Person p
WHERE
    dateadd(yy, 65, p.dob)) between getdate() and dateadd(mm,3,getdate())

答案 1 :(得分:0)

您可以使用与DATEADD()相关联的DATEDIFF()功能

FLOOR(DATEDIFF(DAY, DOB, DATEADD(month, 3, GETDATE())) / 365.25) >= 65

答案 2 :(得分:0)

这个怎么样?

我认为维护起来要容易得多,而不是拥有很多嵌套函数。

更新:( 这应该足够准确 - 最多可以预期

SELECT *
FROM TABLE
WHERE DATEDIFF(MONTH, DOB, GETDATE()) BETWEEN (64 * 12) AND (65 * 12 - 3)
AND DOB >= CAST(CAST(YEAR   (DATEADD(MONTH, -3, dob)) as nvarchar(8)) + 
                CAST(MONTH  (DATEADD(MONTH, -3, GETDATE())) as nvarchar(8)) +
                CAST(DAY    (DATEADD(MONTH, -3, GETDATE())) as nvarchar(8)) as datetime);

第一个条件检查该人的年龄是否为64岁,高达65岁减去3个月(但包括3个月以上但不到4个月的人)。

第二个条件是提高查询准确性以返回仅长达3个月的人。

示例:

declare @tbl table (dob datetime);
insert @tbl values ('19530101')
    , ('19530201')
    , ('19521231')
    , ('19521201')
    , ('19520101');

select *
from @tbl
WHERE DATEDIFF(MONTH, DOB, GETDATE()) BETWEEN (64 * 12) AND (65 * 12 - 3)
    AND DOB >= CAST(CAST(YEAR (DATEADD(MONTH, -3, dob)) as nvarchar(8)) + 
               CAST(MONTH     (DATEADD(MONTH, -3, GETDATE())) as nvarchar(8)) +
               CAST(DAY       (DATEADD(MONTH, -3, GETDATE())) as nvarchar(8)) as datetime);

答案 3 :(得分:0)

也许使用BEETWEEN

where DATEDIFF(DAY, DOB, GETDATE()) / 365.25 between 64 and 64.4