sql - Is that possible to write the below query using CTE recursion? -


create table #temp (date date) declare @x date set @x = '2016-7-01' declare @y date  set @y = cast (getdate() date) while(@x<=@y)  begin if (datename(weekday,@x) = 'sunday') insert #temp values (@x) set @x = cast(((cast(@x datetime))+1)as date) continue end select * #temp drop table #temp 

is possible write above query using cte recursion?

you can use cte create numbers table. can use numbers table dates so:

declare @startdate datetime = '2016-07-01' declare @enddate datetime = '2016-08-29'  ;with  n0 (select 1 n union select 1) ,n1 (select 1 n n0 t1, n0 t2) ,n2 (select 1 n n1 t1, n1 t2) ,n3 (select 1 n n2 t1, n2 t2) ,n4 (select 1 n n3 t1, n3 t2) ,nums (select row_number() on (order (select 1)) num n4) select dateadd(day,num-1,@startdate) thedate nums num <= datediff(day,@startdate,@enddate) + 1 , datename(weekday, dateadd(day,num-1,@startdate)) = 'sunday' 

each table (n0 nums) multiplies number of rows in previous 'table', end 65,536 rows of numbers in nums (you can less or more adding or removing table nx required). then, use numbers table add days start date(select dateadd(day,num-1,@startdate) thedate) , dates returned in date range, , weekday sunday.

also, because numbers in nums start @ 1, use nums-1 in our select, avoid skipping on first date in our series, giving dateadd(day, 0, @startdate) in our first row.


Comments

Popular posts from this blog

amazon web services - S3 Pre-signed POST validate file type? -

c# - Check Keyboard Input Winforms -