在论坛中出现的比较难的sql问题:33(递归 连续日期问题 )

最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了。

所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。 

MS-SQL取连续日期问题  
http://bbs.csdn.net/topics/390635235?page=1#post-395995697


我现在需要得出表A中所有FBeginDate和FEndDate字段间的日期


下面是我的解法,使用了递归查询:

drop table tb

create table tb(FBeginDate datetime,FEndDate datetime)

insert into tb
select '2010-10-01','2010-10-01'
union all select '2010-10-01','2010-10-07'
union all select '2011-01-30','2011-02-12'


;with t
as
(
select 1 as number
union all
select number + 1
from t
where t.number < 100
)

select tb.FBeginDate,
       tb.FEndDate,
       dateadd(day,t.number-1,FBeginDate) as '两个日期之间的天'
from tb
inner join t
        on datediff(day,FBeginDate,FEndDate) +1 >= t.number
order by tb.FBeginDate,
         '两个日期之间的天'
         
/*
FBeginDate	            FEndDate	            两个日期之间的天
2010-10-01 00:00:00.000	2010-10-01 00:00:00.000	2010-10-01 00:00:00.000
2010-10-01 00:00:00.000	2010-10-07 00:00:00.000	2010-10-01 00:00:00.000
2010-10-01 00:00:00.000	2010-10-07 00:00:00.000	2010-10-02 00:00:00.000
2010-10-01 00:00:00.000	2010-10-07 00:00:00.000	2010-10-03 00:00:00.000
2010-10-01 00:00:00.000	2010-10-07 00:00:00.000	2010-10-04 00:00:00.000
2010-10-01 00:00:00.000	2010-10-07 00:00:00.000	2010-10-05 00:00:00.000
2010-10-01 00:00:00.000	2010-10-07 00:00:00.000	2010-10-06 00:00:00.000
2010-10-01 00:00:00.000	2010-10-07 00:00:00.000	2010-10-07 00:00:00.000
2011-01-30 00:00:00.000	2011-02-12 00:00:00.000	2011-01-30 00:00:00.000
2011-01-30 00:00:00.000	2011-02-12 00:00:00.000	2011-01-31 00:00:00.000
2011-01-30 00:00:00.000	2011-02-12 00:00:00.000	2011-02-01 00:00:00.000
2011-01-30 00:00:00.000	2011-02-12 00:00:00.000	2011-02-02 00:00:00.000
2011-01-30 00:00:00.000	2011-02-12 00:00:00.000	2011-02-03 00:00:00.000
2011-01-30 00:00:00.000	2011-02-12 00:00:00.000	2011-02-04 00:00:00.000
2011-01-30 00:00:00.000	2011-02-12 00:00:00.000	2011-02-05 00:00:00.000
2011-01-30 00:00:00.000	2011-02-12 00:00:00.000	2011-02-06 00:00:00.000
2011-01-30 00:00:00.000	2011-02-12 00:00:00.000	2011-02-07 00:00:00.000
2011-01-30 00:00:00.000	2011-02-12 00:00:00.000	2011-02-08 00:00:00.000
2011-01-30 00:00:00.000	2011-02-12 00:00:00.000	2011-02-09 00:00:00.000
2011-01-30 00:00:00.000	2011-02-12 00:00:00.000	2011-02-10 00:00:00.000
2011-01-30 00:00:00.000	2011-02-12 00:00:00.000	2011-02-11 00:00:00.000
2011-01-30 00:00:00.000	2011-02-12 00:00:00.000	2011-02-12 00:00:00.000
*/ 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值