简体   繁体   中英

Add a day to a predefined date SQL Server 2008 R2

My question is very simple, I am making a query which I intend to make an insertion from two dates to a temp Table.

That is, 2020-04-01 00:00:00 and 20-04-01 23:59:00, hence the number of days you need increases.

I am doing it this way EG:

DECLARE @StartDate  DATETIME = '2020-04-01'
DECLARE @EndDate    DATETIME = '2020-04-01'

SET @StartDate = @StartDate + '00:00:00'
SET @EndDate   = @EndDate   + '23:59:00'

WHILE (@StartDate <= @EndDate)
BEGIN
--Insert into a temp table
set @StartDate  = DATEADD(DAY, 1, @StartDate);
set @EndDate    = DATEADD(day, 1, @EndDate);

print @StartDate 
print @EndDate 
END;

, however it goes into a repetitive cycle and does not stop. Besides, it is not only respecting the increment of the day that I need.

Can someone help me with this please.

I want to get to this:

Initial date: 2020-04-01 00:00:00.

End Date: 2020-04-01 23:59:00.

Starting day increment 2020-04-02 00:00:00

End Date Increment: 2020-04-02 23:59:00.

My query is throwing this at me:

   Apr  2 2020 12:00AM
Apr  2 2020 11:59PM
Apr  3 2020 12:00AM
Apr  3 2020 11:59PM
Apr  4 2020 12:00AM
Apr  4 2020 11:59PM
Apr  5 2020 12:00AM
Apr  5 2020 11:59PM
Apr  6 2020 12:00AM
Apr  6 2020 11:59PM
Apr  7 2020 12:00AM
Apr  7 2020 11:59PM
Apr  8 2020 12:00AM
Apr  8 2020 11:59PM
Apr  9 2020 12:00AM
Apr  9 2020 11:59PM
Apr 10 2020 12:00AM
Apr 10 2020 11:59PM
Apr 11 2020 12:00AM
Apr 11 2020 11:59PM
Apr 12 2020 12:00AM
Apr 12 2020 11:59PM
Apr 13 2020 12:00AM
Apr 13 2020 11:59PM
Apr 14 2020 12:00AM
Apr 14 2020 11:59PM
Apr 15 2020 12:00AM
Apr 15 2020 11:59PM
Apr 16 2020 12:00AM
Apr 16 2020 11:59PM
Apr 17 2020 12:00AM
Apr 17 2020 11:59PM
Apr 18 2020 12:00AM
Apr 18 2020 11:59PM
Apr 19 2020 12:00AM
Apr 19 2020 11:59PM
Apr 20 2020 12:00AM
Apr 20 2020 11:59PM
Apr 21 2020 12:00AM
Apr 21 2020 11:59PM
Apr 22 2020 12:00AM
Apr 22 2020 11:59PM
Apr 23 2020 12:00AM
Apr 23 2020 11:59PM
Apr 24 2020 12:00AM
Apr 24 2020 11:59PM
Apr 25 2020 12:00AM
Apr 25 2020 11:59PM
Apr 26 2020 12:00AM
Apr 26 2020 11:59PM
Apr 27 2020 12:00AM
Apr 27 2020 11:59PM
Apr 28 2020 12:00AM
Apr 28 2020 11:59PM
Apr 29 2020 12:00AM
Apr 29 2020 11:59PM
Apr 30 2020 12:00AM
Apr 30 2020 11:59PM
May  1 2020 12:00AM
May  1 2020 11:59PM
May  2 2020 12:00AM
May  2 2020 11:59PM
May  3 2020 12:00AM
May  3 2020 11:59PM
May  4 2020 12:00AM
May  4 2020 11:59PM
May  5 2020 12:00AM
May  5 2020 11:59PM
May  6 2020 12:00AM
May  6 2020 11:59PM
May  7 2020 12:00AM
May  7 2020 11:59PM
May  8 2020 12:00AM
May  8 2020 11:59PM
May  9 2020 12:00AM
May  9 2020 11:59PM
May 10 2020 12:00AM
May 10 2020 11:59PM
May 11 2020 12:00AM
May 11 2020 11:59PM
May 12 2020 12:00AM
May 12 2020 11:59PM
May 13 2020 12:00AM
May 13 2020 11:59PM
May 14 2020 12:00AM
May 14 2020 11:59PM
May 15 2020 12:00AM
May 15 2020 11:59PM
May 16 2020 12:00AM
May 16 2020 11:59PM
May 17 2020 12:00AM
May 17 2020 11:59PM
May 18 2020 12:00AM
May 18 2020 11:59PM
May 19 2020 12:00AM
May 19 2020 11:59PM
May 20 2020 12:00AM
May 20 2020 11:59PM
May 21 2020 12:00AM
May 21 2020 11:59PM
May 22 2020 12:00AM
May 22 2020 11:59PM
May 23 2020 12:00AM
May 23 2020 11:59PM
May 24 2020 12:00AM
May 24 2020 11:59PM
May 25 2020 12:00AM
May 25 2020 11:59PM
May 26 2020 12:00AM
May 26 2020 11:59PM
May 27 2020 12:00AM
May 27 2020 11:59PM
May 28 2020 12:00AM
May 28 2020 11:59PM
May 29 2020 12:00AM
May 29 2020 11:59PM
May 30 2020 12:00AM
May 30 2020 11:59PM
May 31 2020 12:00AM
May 31 2020 11:59PM
Jun  1 2020 12:00AM
Jun  1 2020 11:59PM
Jun  2 2020 12:00AM
Jun  2 2020 11:59PM
Jun  3 2020 12:00AM
Jun  3 2020 11:59PM
Jun  4 2020 12:00AM
Jun  4 2020 11:59PM
Jun  5 2020 12:00AM
Jun  5 2020 11:59PM
Jun  6 2020 12:00AM
Jun  6 2020 11:59PM
Jun  7 2020 12:00AM
  • Any suggestion?
  • Where is my mistake?.

Thank you.

Use a recursive CTE:

DECLARE @StartDate  DATETIME = '2020-04-01';
DECLARE @EndDate    DATETIME = '2020-04-01';

with dates as (
      select @startdate as startdate, dateadd(minute, -1, dateadd(day, 1, @startdate)) as enddate
      union all
      select dateadd(day, 1, startdate), dateadd(day, 1, enddate)
      from dates
      where startdate < @enddate
     )
select *
from dates
option (maxrecursion 0);

Here is a db<>fiddle.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM