2011-10-25 3 views
1

는 나는 내가 쿼리를 원 1978년 12월 22일CTE 쿼리 2 가지 조건이 작동하지 않습니까?

에서 태어났다 (CTE에!) 내가 내 생일 (날짜 부분 일 = 22)

declare @t0 datetime = '1978/12/22'; 
declare @t1 datetime = getdate(); 


with CTEE (val,day1) 
AS 
(
    SELECT @t0,DATEPART(day,@t0) 
    UNION all 
    SELECT DATEADD(day,1,val) , DATEPART(day,day1) from ctee where(DATEADD(day,1,val) <[email protected]) and DATEPART(day,day1)=22 
) 
select val,day1 from CTEE OPTION (MAXRECURSION 20000) 

이 저를 반환하는 것 같다 어떻게 이제까지 표시 1 행 (이유 : ???)

If I removeand DATEPART(day,day1)=22 그래서 나는 모든 날을 살아있게합니다.

내가 찾은 해결책은 이것이다 :

declare @t0 datetime = '1978/12/22'; 
    declare @t1 datetime = getdate(); 


    with CTEE (val,day1) 
    AS 
    (
     SELECT @t0,DATEPART(day,@t0) 
     UNION all 
     SELECT DATEADD(day,1,val) , DATEPART(day,day1) from ctee where(DATEADD(day,1,val) <[email protected]) 

    ) 
    select val,day1 from CTEE where day1=22 OPTION (MAXRECURSION 20000) 

하지만 내 질문은 그것이 작동하지 않는 이유 첫 번째 쿼리에서 입니까?

답변

관련 문제