所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。
我现在需要得出表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
- */
在论坛中出现的比较难的sql问题:33(递归 连续日期问题 )
原文:https://www.cnblogs.com/lonelyxmas/p/12020063.html