0

年間の会計日を取得する方法、つまり、関数に 4 月 2 日を渡すと、2 が返されます。会計年度は、毎年 4 月 1 日に始まります。

4

2 に答える 2

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 が返されることに注意してください。

于 2012-05-03T06:43:26.593 に答える
1

@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
于 2012-05-03T06:44:44.550 に答える