年間の会計日を取得する方法、つまり、関数に 4 月 2 日を渡すと、2 が返されます。会計年度は、毎年 4 月 1 日に始まります。
2 に答える
会計カレンダーは組織に固有のものであり、めったに変更されることはありません。最も簡単な解決策は、会計カレンダーの概要を示すテーブルを作成することです。したがって、CTE を使用してこれを模倣できますが、テーブルとして保存することをお勧めします。
With FiscalCalendarStarts As
(
Select 1 As FiscalPeriod
, Cast('20120401' As DateTime) As StartDate
Union All
Select FiscalPeriod + 1
, Case
When Month(StartDate) = 12 Then DateAdd(m, Month(StartDate) - 12 + 1, StartDate)
Else DateAdd(m, 1, StartDate)
End
From FiscalCalendarStarts
Where FiscalPeriod < 12
)
, FiscalCalendar As
(
Select FiscalPeriod
, StartDate
, DateAdd(d, -1, DateAdd(m, 1, StartDate)) As EndDate
From FiscalCalendarStarts
)
Select *
From FiscalCalendar
Where @SomeDate Between StartDate And EndDate
編集
日数を取得するには (上記のソリューションでは提供しなかったことを認めます)、秘訣は、入力日に基づいて実際の会計年度の開始日を決定することです。それを行うには、次のようなことを行うことができます。リクエストに応じて、関数に入れました
Create Function dbo.FiscalDay ( @Input datetime )
Returns int
As
Begin
Declare @StartDayMonth char(4);
Set @StartDayMonth = '0401';
Return (
Select DateDiff(d, FYStartDate, @Input) + 1
From (
Select DateAdd(yyyy
, Case
When DatePart(dy, @Input) >= DatePart(dy, StartDate) Then 0
Else -1
End
, StartDate) As FYStartDate
From (
Select Cast( Cast(Year(@Input) As char(4))
+ @StartDayMonth As datetime ) As StartDate
) As S1
) As S
)
End
0401
会計年度の開始月と日を表すスタブから始めます。その前に渡された日付の年を追加するので20120401
、2012 年の日付が渡された場合のようになります。が 1-Apr より遅い場合@Input
、 の年の新しい会計年度に入ってい@Input
ます。が 4 月 1 日より前の場合@Input
、前年の 4 月 1 日から始まる会計年度になります。会計開始日がわかったので、それらの間の日数を見つけて 1 を足すだけです (そうしないと、4 月 1 日が 1 日目ではなく 0 日目と見なされます)。2012 年はうるう年だったので、31-Mar-2012 を渡すと 365 ではなく 366 が返されることに注意してください。
@Olivarsham、会計年度はすべての国で一般的ではありません。4月から3月の場所もあれば、1月から12月の場所もあります。したがって、それはあなたの特別なアプリケーション要件であり、あなた自身のために書く必要があります. そのための標準的なクエリはないと思います。
ぜひこの機能をお試しください。これにより、会計年度の日数が返されます。
CREATE FUNCTION [dbo].[FiscalDay] (@CurrentDATE datetime)
RETURNS int
AS
BEGIN
DECLARE @FiscalDay int;
DECLARE @YearStartDate DateTime;
Set @YearStartDate=Cast('20120401' As DateTime)
set @FiscalDay = DATEDIFF(DAY,@YearStartDate , @CurrentDATE)
RETURN(@FiscalDay);
END;
GO