Oracle获取连续日期 分钟,小时。。。。

内容参考来源  :

 https://blog.csdn.net/winne_shen/article/details/79668164

https://blog.csdn.net/ztg2006/article/details/5287035

https://blog.csdn.net/weixin_34757654/article/details/116418213

一、oracle获取连续日期 分钟,小时等,以下内容,更多是提供一种思路:

-- 获取每一天的分钟数
SELECT TO_DATE('2018-03-23', 'YYYY-MM-DD') + (ROWNUM - 1) / (24 * 60) tm 
FROM DUAL CONNECT BY ROWNUM <= 24*60;

-- 获取某天的每10分钟时间
SELECT TO_DATE('2018-03-23', 'YYYY-MM-DD') + (ROWNUM - 1) / (24 * 6) tm 
FROM DUAL CONNECT BY ROWNUM <= 24*6;

-- 获取某天每小时的时间
SELECT TO_DATE('2018-03-23', 'YYYY-MM-DD') + (ROWNUM - 1) / 24
FROM DUAL CONNECT BY ROWNUM <= 24;

-- 获取某段时间的小时列表
SELECT to_date('2013-07-01 12', 'yyyy-mm-dd hh24') + (ROWNUM - 1) / 24 sdate FROM dual
CONNECT BY ROWNUM <= (to_date('2013-07-02 22', 'yyyy-mm-dd hh24') - to_date('2013-07-01 12', 'yyyy-mm-dd hh24')) * 24 + 1;

-- 获取某时间段内每天的日期
SELECT TO_DATE('2018-03-23', 'YYYY-MM-DD') + (ROWNUM - 1)
FROM DUAL CONNECT BY ROWNUM <=
TRUNC(TO_DATE('2020-03-23', 'YYYY-MM-DD')) - TRUNC(TO_DATE('2018-03-23', 'YYYY-MM-DD'));

-- 获取某时间段内的每月
SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2018-03-02', 'YYYY-MM-DD'), ROWNUM - 1), 'YYYY-MM')
FROM DUAL CONNECT BY ROWNUM <=
CEIL(MONTHS_BETWEEN(TO_DATE('2020-03-03', 'YYYY-MM-DD'), TO_DATE('2018-03-02','YYYY-MM-DD')));

-- 获取某时间段内每年的年份
SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2018-03-02', 'YYYY-MM-DD'), (ROWNUM - 1) * 12), 'YYYY')
FROM DUAL CONNECT BY ROWNUM <=
CEIL(MONTHS_BETWEEN(TO_DATE('2020-03-03', 'YYYY-MM-DD'), TO_DATE('2018-03-02','YYYY-MM-DD')) / 12);


-- 获取某时间段内每周的起始日期(周一)和其周数
SELECT TRUNC(TO_DATE('2018-03-02', 'YYYY-MM-DD') + (ROWNUM - 1) * 7, 'D') + 1 AS STARTTIME,
TO_CHAR( TO_DATE('2018-03-02', 'YYYY-MM-DD') + (ROWNUM - 1) * 7, 'IW') AS WEEK
FROM DUAL CONNECT BY ROWNUM <=
TRUNC(TO_DATE('2019-03-02', 'YYYY-MM-DD') - TO_DATE('2018-03-02', 'YYYY-MM-DD')) / 7 + 1;




 

二、Oracle trunc()函数的总结

截取日期

select trunc(sysdate) from dual;                 --截取到天                                          2021-05-28 00:00:00
select trunc(sysdate, 'hh24') from dual;--截取到小时                                         2021-05-28 17:00:00
select trunc(sysdate, 'mi') from dual;     --截取到分钟                                        2021-05-28 17:39:00

select trunc(sysdate,'yy') from dual;     --返回当年第一天                                 2021-01-01 00:00:00
select trunc(sysdate,'yyyy') from dual; --返回当年第一天                            2021-01-01 00:00:00
select trunc(sysdate, 'mm') from dual;     --返回当月第一天                                 2021-05-01 00:00:00
select trunc(sysdate,'dd') from dual;        --返回当前年月日                                 2021-05-28 00:00:00

select trunc(sysdate,'q') from dual;    --返回当季的第一天                            2021-04-01 00:00:00

select trunc(sysdate,'d') from dual;         --(星期日)返回本周(周日开始->周六)的第一天  2021-05-23 00:00:00
select trunc(sysdate,'iw') from dual;     -- 返回本周(iw算法:周一到周日)的第一天,周一, 2021-05-24 00:00:00
select trunc(sysdate, 'ww') from dual;     --     返回本周的第一天,20210101是周五,所以这里返回 2021-05-28 00:00:00(周五) 
select trunc(sysdate, 'w') from dual;     --  当月本周的第一天(从本月1号算本周的第一天,8号算第二周的第一天),2021-05-22 00:00:00

截取数字:精度舍去,如果小数位数不够,不会补0;

select trunc(123.458) from dual; --123

select trunc(123.458, 0) from dual; --123

select trunc(123.458, 1) from dual; --123.4

select trunc(123.458, -1) from dual; --120

select trunc(123.458, -4) from dual; --0

select trunc(123.458, 4) from dual; --123.458

select trunc(123) from dual; --123

select trunc(123, 1) from dual; --123

select trunc(123, -1) from dual; --120

三、Oracle to_char()函数中的IW,WW 周别显示

ww的算法为每年1月1日为第一周开始,date+6为每一周结尾

例如20050101为第一周的第一天,而第一周的最后一天为20050101+6=20050107

  公式 每周第一天 :date + 周 * 7 - 7

  每周最后一天:date + 周 * 7 - 1

iw的算法为星期一至星期日算一周,且每年的第一个星期一为第一周

   例如20050101为星期六,所以用iw的算法是前年的53周,而20050103之后才是第一周的开始。

  公式 每周第一天 :next_day(date) + 周 * 7 - 7

  每周最后一天:next_day(date) + 周 * 7 - 1

其它:

  A、查今天是 "本月" 的第几周

  SELECT TO_CHAR(SYSDATE,'WW') - TO_CHAR(TRUNC(SYSDATE,'MM'),'WW') + 1 AS "weekOfMon" from dual;

  或

  SELECT TO_CHAR(SYSDATE,'W') AS "weekOfMon" from dual;

  B、查今天是 "今年" 的第几周

  select to_char(sysdate,'ww') from dual;

  或

  select to_char(sysdate,'iw') from dual;

 

 

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值