目录
Oracle 计算两个日期之间的月份数、月份列表、天数、日期列表
Oracle 计算两个日期之间的月份数、月份列表、天数、日期列表
-
获取日期之间的月数(包括自身)
-
时间:2019-05-30 至 2019-08-01
-
*另一种易理解的方法:select (MONTHS_BETWEEN ( TRUNC(TO_DATE('2018-08-01','YYYY-MM-DD'),'MONTH'), TRUNC(TO_DATE('2018-05-30','YYYY-MM-DD'),'MONTH') ) + 1) MONTH_COUNT from dual;
select (MONTHS_BETWEEN ( to_date(to_char(sysdate,'yyyy-MM'),'yyyy-MM'), to_date(to_char(to_date('2019-06-30','yyyy-MM-dd'),'yyyy-MM'),'yyyy-MM') ) + 1) MONTH_COUNT from dual;
- Result:
MONTH_COUNT 4
- 函数知悉:
- MONTHS_BETWEEN (date1, date2);
- TRUNC(SYSDATE,'MONTH'):
-
ROUND(d[,fmt]),返回一个以 fmt 为格式的四舍五入日期值,d 是日期,fmt 是格式 模型。默认 fmt 为 DDD,即月中的某一天。 如果 fmt 为“YEAR”则舍入到某年的 1 月 1 日,即前半年舍去,后半年作为下 一年。 如果 fmt 为“MONTH”则舍入到某月的 1 日,即前月舍去,后半月作为下一 月。 默认为“DDD”,即月中的某一天,最靠近的天,前半天舍去,后半天作为第 二天。 如果 fmt 为“DAY”则舍入到最近的周的周日,即上半周舍去,下半周作为下 一周周日。
与 ROUND 对应的函数时 TRUNC(d[,fmt])对日期的操作,TRUNC 与 ROUND 非常相似,只 是不对日期进行舍入,直接截取到对应格式的第一天。
-
-
- 获取日期之间的月份列表(包括自身)
- 时间:2019-08-01 至 2020-01-01
- SQL:
select TO_CHAR(ADD_MONTHS(TO_DATE('2019-08-01','YYYY-MM-DD'),(ROWNUM - 1)), 'yyyy-mm') MOHTN_ID from dual CONNECT BY ROWNUM <= MONTHS_BETWEEN ( TRUNC(TO_DATE('2020-01-01','YYYY-MM-DD'),'MONTH'), TRUNC(TO_DATE('2019-08-01','YYYY-MM-DD'),'MONTH') ) + 1 ;
- Result:
MOHTN_ID 1 2019-08 2 2019-09 3 2019-10 4 2019-11 5 2019-12 6 2020-01
-
函数知悉:
-
ADD_MONTHS(d,n),在某一个日期 d 上,加上指定的月数 n,返回计算后的新日期。 d 表示日期,n 表示要加的月数。
-
CONNECT BY:connect by 用于存在父子,祖孙,上下级等层级关系的数据表进行层级查询。
-
-
获取日期之间的天数、日期列表(包含自身)
时间:2018-01-28 至 2018-02-04-
SQL:
SELECT TO_CHAR(TO_DATE('2018-01-28', 'YYYY-MM-DD') + ROWNUM - 1, 'YYYY-MM-DD') DAY_ID FROM DUAL CONNECT BY ROWNUM <= TO_DATE('2018-02-04', 'YYYY-MM-DD') - TO_DATE('2018-01-28', 'YYYY-MM-DD') + 1;
-
Result:
DAY_ID 1 2018-01-28 2 2018-01-29 3 2018-01-30 4 2018-01-31 5 2018-02-01 6 2018-02-02 7 2018-02-03 8 2018-02-04
-
知悉:
-
TO_DATE(data1) - TO_DATE(date2) :天数
-
-