calcolare l’anno fiscale in istruzione sql select?

Ho un campo data che deve restituire nell’anno fiscale formato. esempio

Start_Date        Year 
04/01/2012 -      2013
01/01/2012 -      2012
09/15/2013 -      2014

Abbiamo bisogno di calcolare

04/01/2012 to 03/31/2013 is FY 2013

e

04/01/2013 to 03/31/2014 is FY 2014

Come possiamo fare in istruzione select?

quindi è necessario che la data di fine?
è il vostro input dati corretti per la vostra uscita nell’esempio di cui sopra ?penso di ingresso è sbagliato .

OriginaleL’autore James123 | 2013-12-12

9 Replies
  1. 12

    David è una soluzione molto buona. Una semplice espressione:

    select year(dateadd(month, -3, start_date)) as FiscalYear

    Che è, sottrarre 3 mesi all’anno.

    EDIT:

    Come indicato nel commento, questo sembra produrre un anno troppo presto. Qui ci sono due soluzioni:

    select year(dateadd(month, 9, start_date)) as FiscalYear
    
    select 1 + year(dateadd(month, -3, start_date)) as FiscalYear
    Penso che sia più semplice espressione di CASO-QUANDO-then-ELSE, ma in questo particolare esempio, si desidera aggiungere 9 mesi. Se si aggiungono 9 mesi, da aprile si ottiene urtato fino a anno prossimo gennaio.
    Grazie. Ho modificato la risposta.

    OriginaleL’autore Gordon Linoff

  2. 10
    SELECT CASE WHEN DatePart(Month, Start_Date) >= 4
                THEN DatePart(Year, Start_Date) + 1
                ELSE DatePart(Year, Start_Date)
           END AS Fiscal_Year
    FROM data

    OriginaleL’autore David

  3. 1

    Ho scelto di farlo in questo modo. È facile e si può sostituire il 09,30 con cosa volete che il vostro fine dell’anno fiscale. Non sono sicuro se questo funziona in qualsiasi cosa, ma di SQL Server.

    CASE 
        WHEN CAST(GETDATE() AS DATE) > 
             SMALLDATETIMEFROMPARTS(DATEPART(YEAR,GETDATE()),09,30,00,000) 
        THEN 
            DATEPART(YEAR,GETDATE()) + 1 ELSE DATEPART(YEAR,GETDATE()) 
        END AS FY

    OriginaleL’autore CG3

  4. 0

    Supponendo che si dispone di una tabella Fiscal_Year con Data_inizio all’Anno, e si desidera trovare l’anno fiscale per una data @Data:

    SELECT MIN(Year) WHERE @Date >= Start_Date FROM Fiscal_Year

    OriginaleL’autore Daniel B

  5. 0
    Declare @t table(StartDate date ,Year1 int)
    insert into @t values('04/01/2012',2013),('01/01/2012',2012),('09/15/2013',2014)
    ;with CTE as
    (select max(year1) maxyear from @t)
    , cte1 as
     (select cast('04/01/'+convert(varchar(4),a.year1) as  date) FromFY,dateadd(day,-1,dateadd(year,1,cast('04/01/'+convert(varchar(4),a.year1) as date))) ToFY
    
    
    ,b.year1 from @t a  inner join (select min(year1)year1 from @t) b on a.year1=b.year1
        union all
       select cast(dateadd(day,1,ToFY) as date),cast(dateadd(year,1,ToFY) as date),year1+1 year1 from     cte1 where year1<=(select maxyear from cte)
    )
    
    select * from cte1

    OriginaleL’autore KumarHarsh

  6. 0
    DECLARE @STARTDATE DATETIME, @ENDDATE DATETIME,@CURR_DATE DATETIME
    SET @CURR_DATE='2015-01-30'
    IF MONTH(@CURR_DATE) IN (1,2,3)
    BEGIN
        SET @STARTDATE= CAST( CAST(YEAR(@CURR_DATE)-1 AS VARCHAR)+'/04/01'  AS DATE)
        SET @ENDDATE= CAST( CAST(YEAR(@CURR_DATE)  AS VARCHAR)+'/03/31'  AS DATE)
    END
    ELSE
    BEGIN
        SET @STARTDATE= CAST( CAST(YEAR(@CURR_DATE) AS VARCHAR)+'/04/01'  AS DATE)
        SET @ENDDATE= CAST( CAST(YEAR(@CURR_DATE)+1 AS VARCHAR)+'/03/31'  AS DATE)
    END
    SELECT @STARTDATE AS ST_FI,@ENDDATE AS END_FY

    OriginaleL’autore AMRENDRA PRASAD

  7. 0

    …qualcosa di semplice 🙂

    (ANNO(DATEADD(Mese-((DATEPART(Mese,[Data])+5) %12),[Data]))+) COME Financial_Year

    OriginaleL’autore Thomas Pollack

  8. 0
    declare @Date smalldatetime, @FiscalYearStartMonth tinyint
    set @Date = GETDATE();
    set @FiscalYearStartMonth = 1; -- Jan
    
    print convert(varchar(4), 
    case when MONTH(@Date) < @FiscalYearStartMonth 
    then YEAR(@Date) -1 
    else YEAR(@Date) end)

    assumendo @Data è il vostro [Data_inizio] campo, è possibile:

    select * from yourTable 
    group by convert(varchar(4), 
    case when MONTH([Start_Date]) < @FiscalYearStartMonth 
    then YEAR([Start_Date]) -1 
    else YEAR([Start_Date]) end)

    Spero che questo aiuta

    OriginaleL’autore Stanley Tso

  9. 0

    Questo è quello che sarebbe simile a oracle per ottenere corrente esercizio finanziario. Immettere la data che si desidera trovare l’anno fiscale in luogo di sysdate

     SELECT '01-APR-'
     ||TO_CHAR((add_months(**sysdate**,-3)),'YYYY') FIN_YEAR_START_DATE,
     '31-MAR-'
     ||(TO_CHAR((add_months(**sysdate**,-3)),'YYYY')+1) FIN_YEAR_END_DATE
     FROM dual;

    OriginaleL’autore Dawn

Lascia un commento