前言:
为规范用户的时间录入,因此我们采用下拉的方式,让用户选择需要的时间,因此我们需要将一天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