2012 年 11 月 30 日までの iMAXYears にまたがるすべてのレコードを選択する次のクエリがあります。
SELECT sum([AllocatedAmount]) as total,
datediff(day,transactiondate,'30 Nov 2012') / DaysInyear AS YearDiff
FROM tblGroups
AND datediff(day,transactiondate, '30 Nov 2012') / DaysInyear < iMaxYears
AND not transactiondate > '30 Nov 2012'
GROUP BY g.groupdescription, nominal,
datediff(day,transactiondate, '30 Nov 2012') / DaysInyear
この質問の目的のために、2012 年 11 月 30 日がハードコードされ (変数名 = lMaxDate)、iMaxYears は 3 です。
私の問題は、DaysInYear の値は通常 365 ですが、うるう年には 366 の値になることです。
2012 年のような閏年では、2012 年 2 月 29 日のため、上記のステートメントは 2011 年 12 月 1 日を取得しません。
知っている
DaysInYear=(CASE WHEN (year % 4 = 0 AND year % 100 <> 0)
OR year % 400 = 0 then 366 else 365)
Currently DaysInYear = 365.
関数を作成する必要がありますか
DaysInYear(lYear) where you pass in a year (lYear)
and it returns 365 or 366?
問題は、年が常に 2 年の一部にまたがるため、Year(transactiondate) を渡すことができないことです。iMaxYears は、結果セットに 4 つの年間期間を含めることができることを意味します。
何か案は?ありがとう