2

毎年、新しい会計年度を含めるように会社の財務報告を更新する必要があります (その年は暦年と一致しないため)。

Case
    when ST_date >= '1996.11.01 00:00:00' and st_date  < '1997.11.01 00:00:00' 
    then '96-97'
[etc]
end as year,

毎年、どのレポートを修正する必要があるかを覚えておく必要があります。ほとんどの年で、1 つ忘れています。

...これを決定する簡単で動的な方法はありますか?

4

8 に答える 8

6

SQL Server で単純なストアド関数を作成して、日付に基づいて会計年度を決定することは間違いありません。

CREATE FUNCTION dbo.GetFinancialYear (@input DATETIME)
RETURNS VARCHAR(20)
AS BEGIN
    DECLARE @FinYear VARCHAR(20)

    SET @FinYear = 
        CASE
            WHEN @INPUT >= '19961101' AND @input < '19971101' THEN '96-97'
            WHEN @INPUT >= '19971101' AND @input < '19981101' THEN '97-98'
            ELSE '(other)'
        END

    RETURN @FinYear
END

そして、それをすべてのクエリで使用してください。

SELECT 
    somedate, dbo.GetFinancialYear(somedate)
......

新しい会計年度を追加する必要がある場合は、1 つの関数を更新するだけで完了です。

更新:これを完全に動的にしたい場合で、会計年度が常に 11 月 1 日に始まるという事実に依存できる場合は、代わりに次のアプローチを使用します。

CREATE FUNCTION dbo.GetFinancialYear (@input DATETIME)
RETURNS VARCHAR(20)
AS BEGIN
    DECLARE @FinYear VARCHAR(20)

    DECLARE @YearOfDate INT

    IF (MONTH(@input) >= 11)
        SET @YearOfDate = YEAR(@input)  
    ELSE
        SET @YearOfDate = YEAR(@input) - 1

    SET @FinYear = RIGHT(CAST(@YearOfDate AS CHAR(4)), 2) + '-' + RIGHT(CAST((@YearOfDate + 1) AS CHAR(4)), 2)

    RETURN @FinYear
END

これは以下を返します:

  • 05/06のような日付に2005-11-25
  • 04/05のような日付に2005-07-25
于 2012-10-10T08:48:37.040 に答える
1
Declare @FinancialMonth Varchar(100)=NULL,@Month smallint,@Date DateTime='04/06/2013'

BEGIN TRY 
SELECT @FinancialMonth='01-'+IsNULL(@FinancialMonth,'April')+'-'+Cast(year(getdate()) as varchar)
SELECT @Month=(Month(Cast(@FinancialMonth as datetime))-1) * -1
END TRY
BEGIN CATCH
SELECT 
        ERROR_NUMBER() AS ErrorNumber,'Invalid Financial Month' ErrorMessage
END CATCH

SELECT Month((CONVERT([varchar](10),dateadd(month,(@Month),@Date),(101)))) FinancialMonth,
Year((CONVERT([varchar](10),dateadd(month,(@Month),@Date),(101)))) FinancialYear
,DatePart(qq,(CONVERT([varchar](10),dateadd(month,(@Month),@Date),(101)))) FinancialQuarter
于 2013-10-10T10:01:00.580 に答える
-1

これは、会計年度が7月に始まる私にとってはうまくいきます。

CASE WHEN DatePart(mm, [YourDate]) >= 7 
  THEN convert(varchar(10), YEAR([YourDate])) +' / '+ Convert(varchar(10), YEAR([YourDate]) + 1 )
  ELSE Convert(varchar(10), YEAR([YourDate]) - 1) +' / '+ Convert(varchar(10), YEAR([YourDate]) )
  END AS [Financial Year],
于 2014-03-26T01:19:18.530 に答える