Reputation: 814
In SQL Server, I want to get days from date to date. Example: from 2015/12/28
to 2016/01/02
, the result as
2015/12/28
2015/12/29
2015/12/30
2015/12/31
2016/01/01
2016/01/02
DECLARE @STARTDATE DATETIME = '2015-12-28'
DECLARE @ENDDATE DATETIME = '2016-01-02'
SELECT BETWEEN @STARTDATE AND @ENDDATE AS DAYS
Upvotes: 1
Views: 97
Reputation: 12309
Use CTE
DECLARE @STARTDATE DATE = '2015-12-28'
DECLARE @ENDDATE DATE = '2016-01-02'
;WITH CTE AS
(
SELECT @STARTDATE As dt
UNION ALL
SELECT DATEADD(D,1,dt) AS dt
FROM CTE
WHERE dt < @ENDDATE
)
SELECT * FROM CTE
Upvotes: 4
Reputation: 2460
You could build a calendar table, which would probably come in handy down the road. Or you could use a loop.
DECLARE @ENDDATE DATETIME = '2016-01-02'
DECLARE @DAY DATETIME = '2015-12-28'
WHILE @Day <= @ENDDATE
BEGIN
SELECT @DAY
SET @DAY = DATEADD(DD,1,@DAY)
END
Or for all of the days in one result set:
DECLARE @ENDDATE DATETIME = '2016-01-02'
DECLARE @DAY DATETIME = '2015-12-28'
DECLARE @TABLE TABLE (DATE DATETIME)
WHILE @Day <= @ENDDATE
BEGIN
INSERT @TABLE
VALUES (@DAY)
SET @DAY = DATEADD(DD,1,@DAY)
END
SELECT *
FROM @TABLE
Upvotes: 3
Reputation: 28890
using Numbers table
select dateadd(day,n,startdate)
from numbers
where dateadd(day,n,startdate)<=enddate
order by n
Upvotes: 0
Reputation: 1
You can specify the dates in your WHERE clause. For example, WHERE date >=@STARTDATE AND date <=@ENDDATE. That should return the full date in your results.
Upvotes: 0