我正在尝试编写一个SQL查询,该查询将根据出生日期为我提供在3个月内满65岁的人的结果。任何帮助,将不胜感激!
在WHERE子句中,我使用以下内容显示了64岁的人的结果,但我不知道如何获得过去3个月
FLOOR(DATEDIFF(DAY, DOB, GETDATE()) / 365.25) = 64
答案 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