UFN_CALCQUARTER

Return

Return Type
varchar(10)

Parameters

Parameter Parameter Type Mode Description
@InputDate varchar(20) IN
@QuarterStartMonth int IN
@QuarterOnly int IN

Definition

Copy

create function [BBDW].[UFN_CALCQUARTER]
               (@InputDate         varchar(20),
                @QuarterStartMonth int,
                @QuarterOnly       int  = 0)
returns varchar(10)
as
  begin
    -- UDF which returns the Quarter Number and Year based on being passed a Data and Month when a fiscal year starts
    -- Arguments @QuartOnly = 0 for Qn-YYYY format for this Qtr, 1 for Qn only format, 2 for Qtr YYYY only format
    -- Arguments @QuartOnly = 3 for Qn-YYYY format for Next Qtr, 4 for Next Qn only format, 5 for Next Qtr YYYY only format
    -- Arguments @QuartOnly = 6 for Qn-YYYY format for Next Qtr, 7 for Next Qn only format, 8 for Next Qtr YYYY only format
    declare  @FiscalMonth  as varchar(2)
    declare  @FiscalQuarter  as varchar(2)
    declare  @FiscalYear  as varchar(4)
    declare  @FiscalQuarterYear  as varchar(20)
    declare  @FiscalNextQuarter  as varchar(2)
    declare  @FiscalNextYear  as varchar(4)
    declare  @FiscalNextQuarterYear  as varchar(20)
    declare  @FiscalPrevQuarter  as varchar(2)
    declare  @FiscalPrevYear  as varchar(4)
    declare  @FiscalPrevQuarterYear  as varchar(20)
    declare  @ThisYear  as varchar(4)
    declare  @NextYear  as varchar(4)
    declare  @PrevYear  as varchar(4)
    declare  @FiscalMonthNum  as int
    declare  @NextQuarterStartMonth  as int
    declare  @QuarterNum  as int
    declare  @iPos  as int
    declare  @FiscalQuarterMonth  as int
    set @iPos = patindex('%/%',@InputDate)
    set @FiscalMonth = left(@InputDate,@iPos
                                         - 1)
    set @FiscalMonthNum = convert(int,@FiscalMonth)
    set @NextQuarterStartMonth = @QuarterStartMonth
    set @ThisYear = right(@InputDate,4)
    set @NextYear = convert(varchar(4),convert(int,right(@InputDate,4))
                                         + 1)
    set @PrevYear = convert(varchar(4),convert(int,right(@InputDate,4))
                                         - 1)
    if @QuarterStartMonth = 1
      begin
        set @QuarterNum = ((@FiscalMonthNum
                              + 2)
                             / 3)
        set @FiscalQuarter = 'Q'
                               + convert(varchar(1),@QuarterNum)
        set @FiscalYear = @ThisYear
        if @QuarterNum < 4
          begin
            set @FiscalNextYear = @ThisYear
            set @FiscalNextQuarter = 'Q'
                                       + convert(varchar(1),@QuarterNum
                                                              + 1)
          end
        if @QuarterNum = 4
          begin
            set @FiscalNextYear = @NextYear
            set @FiscalNextQuarter = 'Q1'
          end
        if @QuarterNum = 1
          begin
            set @FiscalPrevYear = @PrevYear
            set @FiscalPrevQuarter = 'Q4'
          end
        if @QuarterNum > 1
          begin
            set @FiscalPrevYear = @ThisYear
            set @FiscalPrevQuarter = 'Q'
                                       + convert(varchar(1),@QuarterNum
                                                              - 1)
          end
      end
    else
      begin
        if (@QuarterStartMonth = 1
            and @FiscalMonthNum in (1,2,3))
            or (@QuarterStartMonth = 2
                and @FiscalMonthNum in (2,3,4))
            or (@QuarterStartMonth = 3
                and @FiscalMonthNum in (3,4,5))
            or (@QuarterStartMonth = 4
                and @FiscalMonthNum in (4,5,6))
            or (@QuarterStartMonth = 5
                and @FiscalMonthNum in (5,6,7))
            or (@QuarterStartMonth = 6
                and @FiscalMonthNum in (6,7,8))
            or (@QuarterStartMonth = 7
                and @FiscalMonthNum in (7,8,9))
            or (@QuarterStartMonth = 8
                and @FiscalMonthNum in (8,9,10))
            or (@QuarterStartMonth = 9
                and @FiscalMonthNum in (9,10,11))
            or (@QuarterStartMonth = 10
                and @FiscalMonthNum in (10,11,12))
    or (@QuarterStartMonth = 11
                and @FiscalMonthNum in (11,12,1))
            or (@QuarterStartMonth = 12
                and @FiscalMonthNum in (12,1,2))
          begin
            -------------------------------   Q1  ------------------------------------
            set @FiscalPrevQuarter = 'Q4'
            set @FiscalQuarter = 'Q1'
            set @FiscalNextQuarter = 'Q2'
            set @FiscalPrevYear = @ThisYear
            set @FiscalYear = @NextYear
            set @FiscalNextYear = @NextYear
            set @FiscalQuarterMonth = @QuarterStartMonth
          end
        if (@QuarterStartMonth = 1
            and @FiscalMonthNum in (4,5,6))
            or (@QuarterStartMonth = 2
                and @FiscalMonthNum in (5,6,7))
            or (@QuarterStartMonth = 3
                and @FiscalMonthNum in (6,7,8))
            or (@QuarterStartMonth = 4
                and @FiscalMonthNum in (7,8,9))
            or (@QuarterStartMonth = 5
                and @FiscalMonthNum in (8,9,10))
            or (@QuarterStartMonth = 6
                and @FiscalMonthNum in (9,10,11))
            or (@QuarterStartMonth = 7
                and @FiscalMonthNum in (10,11,12))
            or (@QuarterStartMonth = 8
                and @FiscalMonthNum in (11,12,1))
            or (@QuarterStartMonth = 9
                and @FiscalMonthNum in (12,1,2))
            or (@QuarterStartMonth = 10
                and @FiscalMonthNum in (1,2,3))
            or (@QuarterStartMonth = 11
                and @FiscalMonthNum in (2,3,4))
            or (@QuarterStartMonth = 12
                and @FiscalMonthNum in (3,4,5))
          begin
            -------------------------------   Q2  ------------------------------------
            set @FiscalPrevQuarter = 'Q1'
            set @FiscalQuarter = 'Q2'
            set @FiscalNextQuarter = 'Q3'
            set @FiscalYear = @NextYear
            set @FiscalNextYear = @NextYear
            set @FiscalPrevYear = @NextYear
            set @FiscalQuarterMonth = @QuarterStartMonth
                                        + 3
          end
        if (@QuarterStartMonth = 1
            and @FiscalMonthNum in (7,8,9))
            or (@QuarterStartMonth = 2
                and @FiscalMonthNum in (8,9,10))
            or (@QuarterStartMonth = 3
                and @FiscalMonthNum in (9,10,11))
            or (@QuarterStartMonth = 4
                and @FiscalMonthNum in (10,11,12))
            or (@QuarterStartMonth = 5
                and @FiscalMonthNum in (11,12,1))
            or (@QuarterStartMonth = 6
                and @FiscalMonthNum in (12,1,2))
            or (@QuarterStartMonth = 7
                and @FiscalMonthNum in (1,2,3))
            or (@QuarterStartMonth = 8
                and @FiscalMonthNum in (2,3,4))
            or (@QuarterStartMonth = 9
                and @FiscalMonthNum in (3,4,5))
            or (@QuarterStartMonth = 10
                and @FiscalMonthNum in (4,5,6))
            or (@QuarterStartMonth = 11
                and @FiscalMonthNum in (5,6,7))
            or (@QuarterStartMonth = 12
                and @FiscalMonthNum in (6,7,8))
          begin
            -------------------------------   Q3  ------------------------------------
            set @FiscalPrevQuarter = 'Q2'
            set @FiscalQuarter = 'Q3'
            set @FiscalNextQuarter = 'Q4'
            if @QuarterStartMonth < 5
              begin
                set @FiscalPrevYear = @NextYear
                set @FiscalYear = @NextYear
                set @FiscalNextYear = @NextYear
              end
            if @QuarterStartMonth > 4
              begin
                set @FiscalPrevYear = @ThisYear
                set @FiscalYear = @ThisYear
                set @FiscalNextYear = @ThisYear
              end
            set @FiscalQuarterMonth = @QuarterStartMonth
                                        + 6
          end
        if (@QuarterStartMonth = 1
            and @FiscalMonthNum in (10,11,12))
            or (@QuarterStartMonth = 2
                and @FiscalMonthNum in (11,12,1))
            or (@QuarterStartMonth = 3
                and @FiscalMonthNum in (12,1,2))
            or (@QuarterStartMonth = 4
                and @FiscalMonthNum in (1,2,3))
            or (@QuarterStartMonth = 5
                and @FiscalMonthNum in (2,3,4))
            or (@QuarterStartMonth = 6
                and @FiscalMonthNum in (3,4,5))
            or (@QuarterStartMonth = 7
                and @FiscalMonthNum in (4,5,6))
            or (@QuarterStartMonth = 8
                and @FiscalMonthNum in (5,6,7))
            or (@QuarterStartMonth = 9
                and @FiscalMonthNum in (6,7,8))
            or (@QuarterStartMonth = 10
                and @FiscalMonthNum in (7,8,9))
            or (@QuarterStartMonth = 11
                and @FiscalMonthNum in (8,9,10))
            or (@QuarterStartMonth = 12
                and @FiscalMonthNum in (9,10,11))
          begin
            -------------------------------   Q4  ------------------------------------
            set @FiscalPrevQuarter = 'Q3'
            set @FiscalQuarter = 'Q4'
            set @FiscalNextQuarter = 'Q1'
            set @FiscalPrevYear = @ThisYear
            set @FiscalYear = @ThisYear
            set @FiscalNextYear = @NextYear
            set @FiscalQuarterMonth = @QuarterStartMonth
                                        + 9
          end
      end
    set @FiscalQuarterYear = @FiscalQuarter
                               + '-'
                               + @FiscalYear
    set @FiscalNextQuarterYear = @FiscalNextQuarter
                                   + '-'
                                   + @FiscalNextYear
    if @QuarterOnly = 1
      set @FiscalQuarterYear = @FiscalQuarter
    if @QuarterOnly = 2
      set @FiscalQuarterYear = @FiscalYear
    if @QuarterOnly = 3
      set @FiscalQuarterYear = @FiscalNextQuarter
                                 + '-'
                                 + @FiscalNextYear
    if @QuarterOnly = 4
      set @FiscalQuarterYear = @FiscalNextQuarter
    if @QuarterOnly = 5
      set @FiscalQuarterYear = @FiscalNextYear
    if @QuarterOnly = 6
      set @FiscalQuarterYear = @FiscalPrevQuarter
                                 + '-'
                                 + @FiscalPrevYear
    if @QuarterOnly = 7
      set @FiscalQuarterYear = @FiscalPrevQuarter
    if @QuarterOnly = 8
      set @FiscalQuarterYear = @FiscalPrevYear
    if @QuarterOnly = 9
      begin
        if @FiscalQuarterMonth > 12
          set @FiscalQuarterMonth = @FiscalQuarterMonth
                                      - 12
        set @FiscalQuarterYear = convert(varchar(2),@FiscalQuarterMonth)
                                   + '/01/'
                                   + @ThisYear
      end
    if @QuarterOnly = 10
      set @FiscalQuarterYear = right(@FiscalQuarter,1)
    return (@FiscalQuarterYear)
  end