DateTime loop
alter PROC snproc_am_ytd_scoreboard_cp
AS
BEGIN
DECLARE @no_of_days int
SET @no_of_days = 24
DECLARE @yi int, @yj int,@mi int,@mj int,@month int,@noofyrs int
DECLARE @yrstdate datetime, @yrenddate datetime,@monthstdate datetime, @monthenddate datetime,@CurrentDate datetime
SET @month=datepart(mm,getdate()) ;set @noofyrs=-4;
set @CurrentDate=getdate();--dateadd(mm,-4,getdate());
SET @yi=0;
WHILE(@yi>@noofyrs) -- TO GET LAST FOUR YEARS
BEGIN
SELECT @yrstdate= '01/'+convert(varchar(10),'01')+'/'+convert(varchar(10),datepart(yyyy,dateadd(yyyy,@yi,@CurrentDate)));
IF(@yi=0) SET @yrenddate=dateadd(dd,-1,dateadd(mm,1,convert(varchar(10),datepart(mm,@CurrentDate))+'/01/'+convert(varchar(10),datepart(yyyy,dateadd(yyyy,@yi,@CurrentDate)))));
ELSE SET @yrenddate=dateadd(dd,-1,dateadd(yyyy,1,@yrstdate));
SET @yrstdate = dateadd(s,0,dateadd(mi,0,dateadd(hh,0,convert(varchar(10),@yrstdate,101))))
SET @yrenddate = dateadd(s,59,dateadd(mi,59,dateadd(hh,23,convert(varchar(10),@yrenddate,101))))
--MONTH
IF(@yi=0) SET @mj=datepart(mm,@CurrentDate); -- IF IT IS CURRENT YEAR THEN WE HAVE CALCULATE UNTIL CURRENT MONTH NOT UNTIL DECEMBER
ELSE SET @mj=12;
SET @mi=1;
WHILE( @mi<= @mj)
BEGIN
SET @monthstdate=convert(varchar(10),@mi)+'/01/'+convert(varchar(10),datepart(yyyy,@yrstdate));
SET @monthenddate=dateadd(dd,-1,dateadd(mm,1,@monthstdate));
SET @monthstdate = dateadd(s,0,dateadd(mi,0,dateadd(hh,0,convert(varchar(10),@monthstdate,101))))
SET @monthenddate = dateadd(s,59,dateadd(mi,59,dateadd(hh,23,convert(varchar(10),@monthenddate,101))))
PRINT 'MONTH';PRINT @monthstdate;PRINT @monthenddate;
SET @mi=@mi+1
END
PRINT 'YEAR';PRINT @yrstdate; PRINT @yrenddate; --print datepart(mm,@CurrentDate);print dateadd(yyyy,@yi,@CurrentDate);
SET @yi=@yi-1;
END
END
AS
BEGIN
DECLARE @no_of_days int
SET @no_of_days = 24
DECLARE @yi int, @yj int,@mi int,@mj int,@month int,@noofyrs int
DECLARE @yrstdate datetime, @yrenddate datetime,@monthstdate datetime, @monthenddate datetime,@CurrentDate datetime
SET @month=datepart(mm,getdate()) ;set @noofyrs=-4;
set @CurrentDate=getdate();--dateadd(mm,-4,getdate());
SET @yi=0;
WHILE(@yi>@noofyrs) -- TO GET LAST FOUR YEARS
BEGIN
SELECT @yrstdate= '01/'+convert(varchar(10),'01')+'/'+convert(varchar(10),datepart(yyyy,dateadd(yyyy,@yi,@CurrentDate)));
IF(@yi=0) SET @yrenddate=dateadd(dd,-1,dateadd(mm,1,convert(varchar(10),datepart(mm,@CurrentDate))+'/01/'+convert(varchar(10),datepart(yyyy,dateadd(yyyy,@yi,@CurrentDate)))));
ELSE SET @yrenddate=dateadd(dd,-1,dateadd(yyyy,1,@yrstdate));
SET @yrstdate = dateadd(s,0,dateadd(mi,0,dateadd(hh,0,convert(varchar(10),@yrstdate,101))))
SET @yrenddate = dateadd(s,59,dateadd(mi,59,dateadd(hh,23,convert(varchar(10),@yrenddate,101))))
--MONTH
IF(@yi=0) SET @mj=datepart(mm,@CurrentDate); -- IF IT IS CURRENT YEAR THEN WE HAVE CALCULATE UNTIL CURRENT MONTH NOT UNTIL DECEMBER
ELSE SET @mj=12;
SET @mi=1;
WHILE( @mi<= @mj)
BEGIN
SET @monthstdate=convert(varchar(10),@mi)+'/01/'+convert(varchar(10),datepart(yyyy,@yrstdate));
SET @monthenddate=dateadd(dd,-1,dateadd(mm,1,@monthstdate));
SET @monthstdate = dateadd(s,0,dateadd(mi,0,dateadd(hh,0,convert(varchar(10),@monthstdate,101))))
SET @monthenddate = dateadd(s,59,dateadd(mi,59,dateadd(hh,23,convert(varchar(10),@monthenddate,101))))
PRINT 'MONTH';PRINT @monthstdate;PRINT @monthenddate;
SET @mi=@mi+1
END
PRINT 'YEAR';PRINT @yrstdate; PRINT @yrenddate; --print datepart(mm,@CurrentDate);print dateadd(yyyy,@yi,@CurrentDate);
SET @yi=@yi-1;
END
END
Comments