oracle,获取每日24*60,所有分钟数

前言:

        为规范用户的时间录入,因此我们采用下拉的方式,让用户选择需要的时间,因此我们需要将一天24小时的时间拆分为类似00:00,00:01...23:00,23:01,23:59。因此我们需要生成24*60=1440行的下拉复选值。具体效果如下图所示。

思路

        1、又是connect by

        哈哈哈,从数据的结构来看,又是树状的数据,因此最先想到的是使用connect by,类似我们用connect by 做万年历也是这样的。具体我们可以下面这篇关于connect by详细文章介绍。

oracle connect by很强,但是要慎用,不然有你哭的时候_他们叫我技术总监的博客-CSDN博客

SELECT '年' lx, TO_CHAR(ADD_MONTHS(SYSDATE, (4 - ROWNUM)*12), 'YYYY') YEAR_LIST 
FROM DUAL CONNECT BY ROWNUM <= 5 --获取近5年的年份

            2、代码

SELECT to_char(TO_DATE('2023-03-23', 'YYYY-MM-DD') + (ROWNUM - 1) / (24 * 60),'hh24:mi') tm 
FROM DUAL CONNECT BY ROWNUM <= 24*60
--获取一天所有分钟数

        3、效果

         4、代码阐述

        如上图所示,我们一共获得了1440行数据,对应数据从00:00开始至23:59分钟结束。其中的1440=24*60即CONNECT BY ROWNUM <= 24*60来限制生成的结果只有1440行。

        其中 to_char(TO_DATE('2023-03-23', 'YYYY-MM-DD') + (ROWNUM - 1) / (24 * 60),'hh24:mi')的意思是,获取任一一个日期,如2023年3月23日中的分钟数,其实每天都是24小时。因此随便一个日期都可。ROWNUM从1开始至1440结束,因此当ROWNUM=1时,此时to_char(TO_DATE('2023-03-23', 'YYYY-MM-DD') + (ROWNUM - 1) / (24 * 60),'hh24:mi')=to_char(TO_DATE('2023-03-23', 'YYYY-MM-DD'),'hh24:mi')=00:00

同理等ROWNUM=2时,to_char(TO_DATE('2023-03-23', 'YYYY-MM-DD') + (ROWNUM - 1) / (24 * 60),'hh24:mi')=00:01

        .............

同理等ROWNUM=1440时,to_char(TO_DATE('2023-03-23', 'YYYY-MM-DD') + (ROWNUM - 1) / (24 * 60),'hh24:mi')=23:59

猜你喜欢

转载自blog.csdn.net/qq_29061315/article/details/131984086