下个月的增量为每月的第二天SQL sybase

下个月的增量为每月的第二天SQL sybase,sql,database,date,stored-procedures,sybase,Sql,Database,Date,Stored Procedures,Sybase,对于这个问题,我有两个输入: @当前日期 @月日 例如,我希望为一年或更长时间内的每个月找到/增加 例如,如果我有 @当前日期=2012-06-14(yyyy-mm-dd) @DayOfMonth=15(介于1和29-30-31之间,具体取决于月份) 第一圈 @当前日期=2012-06-15 第二圈 @当前日期-2012-07-15 第三圈 @当前日期=2012-08-15 等等 或者让我们把它带到另一个层次。。。适用于每日、每周、双周、每月、每季度、半年和每年 WHEN

对于这个问题,我有两个输入: @当前日期 @月日

例如,我希望为一年或更长时间内的每个月找到/增加

例如,如果我有 @当前日期=2012-06-14(yyyy-mm-dd) @DayOfMonth=15(介于1和29-30-31之间,具体取决于月份)

第一圈 @当前日期=2012-06-15

第二圈 @当前日期-2012-07-15

第三圈 @当前日期=2012-08-15

等等

或者让我们把它带到另一个层次。。。适用于每日、每周、双周、每月、每季度、半年和每年

            WHEN @period = 'D' THEN 
            DATEADD(dd,(CASE DATEPART(cdw, @currentDate) WHEN @resetDay THEN 7 ELSE @resetDay - DATEPART(cdw,@currentDate) END),@currentDate) 
            WHEN @period = 'W' THEN 
            DATEADD(dd,(CASE DATEPART(cdw, @currentDate) WHEN @resetDay THEN 7 ELSE @resetDay - DATEPART(cdw,@currentDate) END),@currentDate) 
            WHEN @period = 'B' THEN 
            DATEADD(dd,(CASE DATEPART(cdw, @currentDate) WHEN @resetDay THEN 14 ELSE @resetDay - DATEPART(cdw,@currentDate) END),@currentDate) 
            WHEN @period = 'M' THEN 
            CASE @resetDay - DATEPART(dd, @currentDate) WHEN 0 THEN DATEADD(mm, 1, @currentDate) ELSE DATEADD(dd, @resetDay - DATEPART(dd, @currentDate), @currentDate) END     
            WHEN @period = 'Q' THEN 
            CASE @resetDay - DATEPART(dd, @currentDate) WHEN 0 THEN DATEADD(mm, 4, @currentDate) ELSE DATEADD(dd, @resetDay - DATEPART(dd, @currentDate), @currentDate) END 
            WHEN @period = 'S' THEN 
            CASE @resetDay - DATEPART(dd, @currentDate) WHEN 0 THEN DATEADD(mm, 6, @currentDate) ELSE DATEADD(dd, @resetDay - DATEPART(dd, @currentDate), @currentDate) END 
请尝试以下代码:

Declare @currentDate datetime Set @currentDate = getdate()
Declare @dayOfTheMonth int Set @dayOfTheMonth = 15

Select 1,DateAdd(month,1, DateAdd(day, @dayOfTheMonth - DatePart(day, @currentDate),@currentDate))
union all 
Select 2,DateAdd(month,2, DateAdd(day, @dayOfTheMonth - DatePart(day, @currentDate),@currentDate))
union all
Select 3,DateAdd(month,3, DateAdd(day, @dayOfTheMonth - DatePart(day, @currentDate),@currentDate))
union all 
Select 4,DateAdd(month,4, DateAdd(day, @dayOfTheMonth - DatePart(day, @currentDate),@currentDate))
/*期间条件
T=子弹
D=每日
W=每周
B=每两周一次
M=每月
Q=季度
S=每半年一次
Y=年度
*/ 
选择@currentDate=CASE
当@period='T'时,则
@结束日期
当@period='D'时,则
DATEADD(日期,1,@currentDate)
当@period='W'时,则
日期添加(dd,(
案例
当@resetDay-DATEPART(cdw,@currentDate)时
/* Period conditions
      T = Bullet 
      D = Daily 
      W = Weekly 
      B = Bi-Weekly 
      M = Monthly 
      Q = Quarterly 
      S = SemiAnnually 
      Y = Annual 
 */ 

 SELECT @currentDate = CASE 
        WHEN @period = 'T' THEN 
          @endDate 
        WHEN @period = 'D' THEN 
                DATEADD(dd,1,@currentDate) 
        WHEN @period = 'W' THEN 
                DATEADD(dd,( 
      CASE 
      WHEN @resetDay - DATEPART(cdw,@currentDate) <= 0 THEN @resetDay - DATEPART(cdw,@currentDate)+7 
      ELSE 
      @resetDay - DATEPART(cdw,@currentDate) 
      END),@currentDate) 
        WHEN @period = 'B' THEN 
                DATEADD(dd,( 
      CASE 
      WHEN @resetDay - DATEPART(cdw,@currentDate) <= 0 THEN @resetDay - DATEPART(cdw,@currentDate)+14 
      ELSE 
      @resetDay - DATEPART(cdw,@currentDate) 
      END),@currentDate) 
  WHEN @period = 'M' THEN 
      CASE 
      WHEN @resetDay - DATEPART(dd,@currentDate) <= 0 THEN DATEADD(mm, 1, DATEADD(dd, @resetDay - DATEPART(dd, @currentDate),@currentDate)) 
      ELSE 
      DATEADD(dd, @resetDay - DATEPART(dd, @currentDate), @currentDate) 
      END                 
        WHEN @period = 'Q' THEN 
                CASE 
      WHEN @resetDay - DATEPART(dd,@currentDate) <= 0 THEN DATEADD(mm, 3, DATEADD(dd, @resetDay - DATEPART(dd, @currentDate),@currentDate)) 
      ELSE 
      DATEADD(dd, @resetDay - DATEPART(dd, @currentDate), @currentDate) 
      END                       
        WHEN @period = 'S' THEN 
            CASE 
      WHEN @resetDay - DATEPART(dd,@currentDate) <= 0 THEN DATEADD(mm, 6, DATEADD(dd, @resetDay - DATEPART(dd, @currentDate),@currentDate)) 
      ELSE 
      DATEADD(dd, @resetDay - DATEPART(dd, @currentDate), @currentDate) 
      END                 
        WHEN @period = 'Y' THEN 
          @endDate 
    END