首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有两个条件的CTE查询不工作?

有两个条件的CTE查询不工作?
EN

Stack Overflow用户
提问于 2011-10-25 21:43:33
回答 1查看 144关注 0票数 1

我生于1978/12/22

我想要一个查询(在CTE!)显示我所有的生日(日期部分= 22)

代码语言:javascript
复制
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) <=@t1)   and DATEPART(day,day1)=22
)
select val,day1 from CTEE OPTION (MAXRECURSION 20000) 

这怎么回我1行(为什么是?)

If I removeand DATEPART(day,day1)=22,所以它给了我所有的日子我活着。

我找到的解决办法是:

代码语言:javascript
复制
  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) <=@t1)  

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

但是我的问题是,为什么在第一个查询中不起作用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-25 21:59:41

因为第二个记录是1978-12-23

这不符合DATEPART(day,day1)=22条件,因此递归步骤不返回任何结果,这将终止Server联机丛书中记录的递归

终止检查是隐式的;当上一次调用没有返回任何行时,递归停止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7896260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档