UFN_GETNEXTDATE

Returns next date given a frequency and date

Return

Return Type
date

Parameters

Parameter Parameter Type Mode Description
@FREQUENCY int IN
@NEXTSCHEDULEDDATE date IN

Definition

Copy


CREATE function [dbo].[UFN_GETNEXTDATE] (
  @FREQUENCY INT
  @NEXTSCHEDULEDDATE date

returns date

begin
  declare @RETVAL date
  declare @DAY int

  set @RETVAL = @NEXTSCHEDULEDDATE

  while @RETVAL <= @NEXTSCHEDULEDDATE
  begin
    if @FREQUENCY = 1 --ANNUALLY

      set @RETVAL = dateadd(yyyy, 1, @RETVAL)
    if @FREQUENCY = 2 --SEMI-ANNUALLY

      set @RETVAL = dateadd(m, 6, @RETVAL)
    if @FREQUENCY = 3 --QUARTYERLY

      set @RETVAL = dateadd(m, 3, @RETVAL)
    if @FREQUENCY = 5 --MONTHLY

      set @RETVAL = dateadd(m, 1, @RETVAL)
    if @FREQUENCY = 4 --BIMONTHLY

      set @RETVAL = dateadd(m, 2, @RETVAL)
    if @FREQUENCY = 6 --SEMI-MONTHLY

      begin
        set @DAY = Day(@RETVAL)
        if @DAY < 15 
          set @RETVAL = dateadd(d, 15 - @DAY, @RETVAL)
        else
          begin
            set @RETVAL = dateadd(m, 1, @RETVAL)
            set @DAY = Day(@RETVAL)
            set @RETVAL = dateadd(d, (-1 * @DAY) + 1, @RETVAL)    
          end
      end

    if @FREQUENCY = 7 --BIWEEKLY

      set @RETVAL = dateadd(d, 14, @RETVAL)
    if @FREQUENCY = 8 --WEEKLY

      set @RETVAL = dateadd(d, 7, @RETVAL)
  end

  return @RETVAL

end