我想根據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