如何解决Oracle-列出每一天中每个月的小时数
我做了一些仪表板,结果发现我没有任何表格,包括我需要的所有日期。我的子查询是由DATE(DD.MM,YYYY)和HOURS(HH24)建立的。但是我迷上了模板。
我列出了一个月中的所有天,
select to_date('1.' || to_CHAR(sysdate,'MM.YYYY'),'dd.mm.yyyy') + level - 1 as month
from dual
connect by level <= TO_CHAR(LAST_DAY(sysdate),'DD')
,还列出了一天中的所有小时,通过
select to_date(to_char(sysdate,'DD.MM.YYYY'),'dd.mm.yyyy') + 1 / 24*(level - 1)
from dual
connect by level <= 24
当我在一个月内将rownum = 1组合在一起时,它只有1天可以使用...
select to_date(to_char(mesic,'dd.mm.yyyy') + 1 / 24*(level - 1)
from
(select *
from (select to_date('1.' || to_CHAR(sysdate,'dd.mm.yyyy') + level - 1 as mesic
from dual
connect by level <= TO_CHAR(LAST_DAY(sysdate),'DD'))
where rownum = 1)
connect by level <= 24
但是,当我删除rownum条件时,我错误地得到了最大行数。
按照我的逻辑,它应该是24(小时)* 31(当月的天数)=744。我的临时dashborads报告通常有5000行,所以这应该不是问题。
谢谢大家的建议
解决方法
如果要生成当月的所有小时数,可以执行以下操作:
with cte (dt) as (
select trunc(sysdate,'month') from dual
union all
select dt + interval '1' hour
from cte
where dt + interval '1' hour < trunc(sysdate,'month') + interval '1' month
)
select * from cte
我们可以通过分别生成天数和小时数,然后交叉连接它们来减少迭代次数:
with
days (dy) as (
select trunc(sysdate,'month') from dual
union all
select dy + interval '1' day
from days
where dy + interval '1' day < trunc(sysdate,'month') + interval '1' month
),hours (hh) as (
select 0 from dual
union all
select hh + 1 from hours where hh < 23
)
select d.dy + h.hh * interval '1' hour dt
from days d
cross join hours h
,
对我来说,看起来就像
select trunc(sysdate,'mm') + (level - 1) / 24 datum
from dual
connect by level <= (add_months(trunc(sysdate,'mm'),1) - trunc(sysdate,'mm')) * 24;
DATUM
----------------
01.08.2020 00:00
01.08.2020 01:00
01.08.2020 02:00
<snip>
31.08.2020 21:00
31.08.2020 22:00
31.08.2020 23:00
744 rows selected.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。