我想根据datediff
函数将年数累加。假设我有两个日期:20/07/2015
和11/10/1976
。在获得差异后,我将这些天分为365天,将其转换为年。因此,我应该得到38.79726027年,在那里我凑了,将得到39.从datediff函数中获得的综述年数
但是,我的tqsl
脚本似乎没有提供预期的答案。任何人都可以帮我查询吗?
我想根据datediff
函数将年数累加。假设我有两个日期:20/07/2015
和11/10/1976
。在获得差异后,我将这些天分为365天,将其转换为年。因此,我应该得到38.79726027年,在那里我凑了,将得到39.从datediff函数中获得的综述年数
但是,我的tqsl
脚本似乎没有提供预期的答案。任何人都可以帮我查询吗?
这样做:
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
应该retur n INT
默认
您可以通过考虑竞争者和选择最接近风险日期的年龄来获得“四舍五入”的年龄。我使用的是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
调用的顺序,我保证两个表达式产生积极结果。
如果它恰好在一个年龄段和另一个年龄段之间分开,上述情况会产生较低的年龄。如果你喜欢在这种情况下更高的年龄,只需将<
换成<=
即可。
'DATEDIFF'返回'int's。没有什么可以从它的回报价值中取舍。四舍五入有什么可接受的“晃动”?即可以计算月份差异和分割是可以接受的?否则,你必须在几天内做到这一点,但随后会出现闰年问题。由于'DATEDIFF'计算*转换*,它将始终生成一个等于或小于您可能需要的“人类”值的数字。 –
简而言之,如果你想没有四舍五入,你应该自己计算一下,比如'DATEDIFF(DAY,'19761011','20150720')/ 365.00' – ASpirin