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


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

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

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

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

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


  1. drop table tb
  2. create table tb(FBeginDate datetime,FEndDate datetime)
  3. insert into tb
  4. select '2010-10-01','2010-10-01'
  5. union all select '2010-10-01','2010-10-07'
  6. union all select '2011-01-30','2011-02-12'
  7. ;with t
  8. as
  9. (
  10. select 1 as number
  11. union all
  12. select number + 1
  13. from t
  14. where t.number < 100
  15. )
  16. select tb.FBeginDate,
  17. tb.FEndDate,
  18. dateadd(day,t.number-1,FBeginDate) as '两个日期之间的天'
  19. from tb
  20. inner join t
  21. on datediff(day,FBeginDate,FEndDate) +1 >= t.number
  22. order by tb.FBeginDate,
  23. '两个日期之间的天'
  24. /*
  25. FBeginDate FEndDate 两个日期之间的天
  26. 2010-10-01 00:00:00.000 2010-10-01 00:00:00.000 2010-10-01 00:00:00.000
  27. 2010-10-01 00:00:00.000 2010-10-07 00:00:00.000 2010-10-01 00:00:00.000
  28. 2010-10-01 00:00:00.000 2010-10-07 00:00:00.000 2010-10-02 00:00:00.000
  29. 2010-10-01 00:00:00.000 2010-10-07 00:00:00.000 2010-10-03 00:00:00.000
  30. 2010-10-01 00:00:00.000 2010-10-07 00:00:00.000 2010-10-04 00:00:00.000
  31. 2010-10-01 00:00:00.000 2010-10-07 00:00:00.000 2010-10-05 00:00:00.000
  32. 2010-10-01 00:00:00.000 2010-10-07 00:00:00.000 2010-10-06 00:00:00.000
  33. 2010-10-01 00:00:00.000 2010-10-07 00:00:00.000 2010-10-07 00:00:00.000
  34. 2011-01-30 00:00:00.000 2011-02-12 00:00:00.000 2011-01-30 00:00:00.000
  35. 2011-01-30 00:00:00.000 2011-02-12 00:00:00.000 2011-01-31 00:00:00.000
  36. 2011-01-30 00:00:00.000 2011-02-12 00:00:00.000 2011-02-01 00:00:00.000
  37. 2011-01-30 00:00:00.000 2011-02-12 00:00:00.000 2011-02-02 00:00:00.000
  38. 2011-01-30 00:00:00.000 2011-02-12 00:00:00.000 2011-02-03 00:00:00.000
  39. 2011-01-30 00:00:00.000 2011-02-12 00:00:00.000 2011-02-04 00:00:00.000
  40. 2011-01-30 00:00:00.000 2011-02-12 00:00:00.000 2011-02-05 00:00:00.000
  41. 2011-01-30 00:00:00.000 2011-02-12 00:00:00.000 2011-02-06 00:00:00.000
  42. 2011-01-30 00:00:00.000 2011-02-12 00:00:00.000 2011-02-07 00:00:00.000
  43. 2011-01-30 00:00:00.000 2011-02-12 00:00:00.000 2011-02-08 00:00:00.000
  44. 2011-01-30 00:00:00.000 2011-02-12 00:00:00.000 2011-02-09 00:00:00.000
  45. 2011-01-30 00:00:00.000 2011-02-12 00:00:00.000 2011-02-10 00:00:00.000
  46. 2011-01-30 00:00:00.000 2011-02-12 00:00:00.000 2011-02-11 00:00:00.000
  47. 2011-01-30 00:00:00.000 2011-02-12 00:00:00.000 2011-02-12 00:00:00.000
  48. */
发布了416 篇原创文章 · 获赞 135 · 访问量 94万+

最新文章

  1. docker——容器安装tomcat
  2. jquery ui 中的插件开发
  3. trunk 的坑
  4. JavaScript (jquery) 数组去重的算法探讨
  5. CruiseControl.NET配置文件(生产环境版本,与SVN结合自动部署)
  6. django中migration文件是干啥的
  7. 同步和异步UDP使用方法
  8. JAVA NIO系列(四) 选择器
  9. 编译android源码官方教程(6)编译内核
  10. [JAVA] java_实例 获得系统字体
  11. NSString+NSStringForJava.m
  12. tornado nginx supervisor
  13. 【JS】&lt;a&gt;标签调用js中函数的几种方法
  14. android欢迎页源码
  15. 日志组件一:Log4j
  16. 历届试题 小数第n位 (求循环节)
  17. C语言:开平方根sqrt程序02
  18. drf开发中常见问题
  19. 切记!pycharm向mysql数据库添加数据过程
  20. [转帖] k8s dashboard 的创建 升级 以及 admin token的创建和简单使用.

热门文章

  1. vim 外部粘贴代码,如何保持原格式,而不持续缩进
  2. Windows使用telnet验证服务端口是否通
  3. 悟空CRM(基于jfinal+vue+ElementUI的前后端分离的开源CRM系统)
  4. leetcode 50. Pow(x, n) 、372. Super Pow
  5. cordova run android 可能遇到的错误解决
  6. Flutter页面跳转返回数据
  7. IsNull、rs、sum
  8. spring-data-redis数据类型
  9. linux非root用户安装5.7.27版本mysql
  10. C# WinForm获取 当前执行程序路径的几种方法(转)