枚举两个日期、月份或者年份之间的所有日期、月份或者年份
来源:互联网 发布:人工智能算法入门 编辑:程序博客网 时间:2024/05/19 18:44
最近在一个需求当中,需要枚举出两个不同类型的时间周期(日期、月份和年份)之间的所有周期,比如2011-01-01和2011-01-04,则要获取日期2011-01-01、2011-01-02、2011-01-03和2011-01-04。这里将日期、月份、年份统称为周期。此需求所属系统使用的是ORACLE10g
既然是求区间的所有周期,则可以考虑使用递增一个原子周期获得,日期可以直接使用符号“+”即可实现,而月份,则可以使用ADD_MONTHS函数,递增需要知道递增的范围,而这个范围即是两个周期之间的间隔周期数。
联想到ORACLE本身就有方法可以计算出两个日期和月份之间间隔的天数或月数,日期:通过两个日期直接相减,如 TO_DATE('2011-05-17', 'YYYY-MM-DD') -TO_DATE('2011-05-01', 'YYYY-MM-DD')即可获取相隔天数,而月份则可以使用函数 MONTHS_BETWEEN(TO_DATE('2012-02', 'YYYY-MM'),TO_DATE('2011-05', 'YYYY-MM'))获取间隔的月份,如果两个参数的格式为具体的日期,则返回带小数。
得到间隔周期数,便可以使用connect by来实现递归,一个好的办法就是使DUAL中的ROWNUM在规定的范围内递增,最终的SQL语句如下:
日期:
SELECT TO_CHAR(TRUNC(TO_DATE('2011-05-01', 'YYYY-MM-DD')) + ROWNUM - 1,'YYYY-MM-DD') YWDATE FROM DUALCONNECT BY ROWNUM - 1 <= TO_DATE('2011-05-17', 'YYYY-MM-DD')-TO_DATE('2011-05-01', 'YYYY-MM-DD')
月份:
SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2011-05', 'YYYY-MM'), ROWNUM - 1),'YYYY-MM') YWDATE FROM DUALCONNECT BY ROWNUM - 1 <=MONTHS_BETWEEN(TO_DATE('2012-02', 'YYYY-MM'),TO_DATE('2011-05', 'YYYY-MM'))
至于年份,你懂的,不说了。
- 枚举两个日期、月份或者年份之间的所有日期、月份或者年份
- 根据年份-月份,获得此月份的所有日期
- 解析一个日期段之间的所有月份,年份,日期,周数等问题
- sqlserver截取日期的年份和月份
- 计算两个年份之间的月份
- 获取当前年份、月份、日期
- 获取两个日期之间的所有月份
- java 获取当前年份 月份 日期
- java 获取当前年份 月份 日期
- java 获取当前年份 月份 日期
- java 获取当前年份 月份 日期
- Java 获取当前年份 月份 日期
- js获取当前日期时间/年份/月份
- sql 输出连续日期、月份、年份
- 设计一个日期类date,包括日期的年份,月份和日号,编写一个友元函数求两个日期之间相差的天数。
- oracle获取某时间段内的年份、月份、日期列表
- GO 获取时间的年份、月份以及日期
- oracle获取某时间段内的年份、月份、日期列表
- Linq to SQlite的使用
- handler的最基本用法
- telnet命令的使用介绍
- 性能测试场景设计
- 笔试题+++去掉思维的墙 更新...
- 枚举两个日期、月份或者年份之间的所有日期、月份或者年份
- Java中字符的全角半角转换
- 基于SSD的数据库性能优化
- c# asp.net fileupload 转载汇总
- 【UBOOT】:mkimage使用详解
- 如果谁和飞鸽传书讨论这两个问题
- js禁止回车自动提交
- Unix网络编程服务器设计方式之一
- 定义自己的网络收发数据函数