从datediff函数获得的综合年份

时间:2017-07-25 04:04:05

标签: sql sql-server date datediff

我想根据rpm -i package_name.rpm函数对数年进行舍入。假设我有两个日期:datediff20/07/2015。获得差异后,我将天数除以365天,将其转换为年。因此,我应该得到38.79726027年,在那里我将会得到39。

但是,我的11/10/1976脚本似乎没有提供预期的答案。任何人都可以帮我查询?

tqsl

2 个答案:

答案 0 :(得分:0)

这样做:

ROUND(ceiling(DATEDIFF(year,[Date of Birth], [Risk_Comm Date])),0)

结果:39.0

CAST(ROUND(ceiling(DATEDIFF(year,[Date of Birth], [Risk_Comm Date])),0) as int)

结果:39

但据我所知,DATEDIFF默认情况下应返回INT

答案 1 :(得分:0)

通过考虑两个竞争者并选择最接近风险日期的竞争者,您可以获得“四舍五入”的年龄。我在这里使用CTE来挑选竞争者,其他选项可能是APPLY

declare @t table (DOB datetime not null, RiskDate datetime not null);
insert into @t(DOB,RiskDate) values ('19761011','20150720');

;With Contenders as (
    select
        DATEDIFF(year,DOB,RiskDate) as Age1,
        DATEDIFF(year,DOB,RiskDate)+1 as Age2,
        *
    from @t
)
select
    CASE WHEN
        DATEDIFF(day,RiskDate,DATEADD(year,Age2,DOB)) <
        DATEDIFF(day,DATEADD(year,Age1,DOB),RiskDate)
        THEN Age2
        ELSE Age1
    END as RoundedAge
from Contenders

通过仔细考虑我将参数放入最终DATEDIFF调用的顺序,我确保两个表达式都能产生正面结果。

如果它在一个年龄与另一个年龄之间完全分开,则上述产生较低的年龄。如果您希望在这种情况下更高年龄,只需将<换成<=