Oracle 获得各种时间段

  1. 背景
    1. 最近 N 天
    2. 月初至当天
    3. 年初以来的每月末

背景

项目中报表需求查询各种时间段的数据,数据没有则为 0 。所以相到了先查出需要的日期再 left join 。

最近 N 天

select to_char((sysdate - 7) + ROWNUM, 'yyyy-MM-dd') as dates
from dual
connect by ROWNUM <= 7;

结果

月初至当天

select to_char(trunc(sysdate, 'mm') + ROWNUM - 1, 'yyyy-MM-dd') as dates
from dual
connect by ROWNUM <= trunc(sysdate - trunc(sysdate, 'mm')) + 1;

结果

年初以来的每月末

select to_char(add_months(last_day(trunc(sysdate, 'yyyy')), ROWNUM - 1), 'yyyy-MM-dd') as dates
from dual
connect by ROWNUM < ceil(months_between(sysdate, trunc(sysdate, 'yyyy')) + 1) - 1;

解释

  • trunc(sysdate, ‘yyyy’) 当前年的第一天

  • months_between 算出距离当前时间的月数

  • last_day(trunc(sysdate, ‘yyyy’)) 第一个月末

结果


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 rockeycui@163.com

文章标题:Oracle 获得各种时间段

文章字数:175

本文作者:崔石磊(RockeyCui)

发布时间:2020-08-05, 18:36:08

原始链接:https://cuishilei.com/oracle_demo1.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏