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