DECLARE
@StartDate DATETIME,@EndDate DATETIMESELECT
@StartDate = '20080101',@EndDate = '20080930'SELECT
DATEADD(day, z.num, @StartDate)FROM
( SELECT b10.i + b9.i + b8.i + b7.i + b6.i + b5.i + b4.i + b3.i + b2.i + b1.i + b0.i num FROM (SELECT 0 i UNION ALL SELECT 1) b0 CROSS JOIN (SELECT 0 i UNION ALL SELECT 2) b1 CROSS JOIN (SELECT 0 i UNION ALL SELECT 4) b2 CROSS JOIN (SELECT 0 i UNION ALL SELECT 8) b3 CROSS JOIN (SELECT 0 i UNION ALL SELECT 16) b4 CROSS JOIN (SELECT 0 i UNION ALL SELECT 32) b5 CROSS JOIN (SELECT 0 i UNION ALL SELECT 64) b6 CROSS JOIN (SELECT 0 i UNION ALL SELECT 128) b7 CROSS JOIN (SELECT 0 i UNION ALL SELECT 256) b8 CROSS JOIN (SELECT 0 i UNION ALL SELECT 512) b9 CROSS JOIN (SELECT 0 i UNION ALL SELECT 1024) b10 ) zWHERE
z.num <= DATEDIFF(day, @StartDate, @EndDate)ORDER
BY z.num
Raju KatarePosted Feb 25, 2012, 4:48 AM
Helpful :)
Nipun TomarPosted Jun 5, 2008, 6:46 PM
This can also be achieved using CTE. A Common Table Expression is a temporary result set that exists only within the scope of a single SQL statement. with CTE(d)as(select d = convert(datetime,'20080101') union all select d = d + 1 from CTE where d < '20081231') SELECT d FROM CTE option (maxrecursion 370)