暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 使用按级别连接生成日期和时间

ASKTOM 2019-03-11
450

问题描述

我有两个SQL查询:

SQL查询1:
select to_date(:sDate,'dd-mm-rrrr')+(level-1)DateRange  from dual 
connect by level <= ((to_date(:endDate,'dd-mm-rrrr')-to_date(:sDate,'dd-mm-rrrr')) + 1);


SQL查询2:
select level,to_char(trunc(sysdate) + (level-1)/24, 'YYYY-MM-DD HH24:MI') AS SysDater,to_char(trunc(sysdate) + (level-1)/24, 'HH24:MI') AS SysHour
from dual connect by level <= 24;



我的问题是: 我不知道要结合上面的查询得到这样的输出:
Date        HRS(24)
-----       -------
1/1/2019      01:00
1/1/2019      02:00
1/1/2019      03:00
.             .
.             .
1/1/2019      24:00
1/2/2019      01:00
1/2/2019      02:00
.             .
1/2/2019      24:00
1/3/2019      01:00
1/3/2019      02:00
1/3/2019      03:00
.             .
.             .
1/3/2019      24:00



意味着每个参数日期将重复24次 (小时)

希望我的问题能尽快得到回答。谢谢。

专家解答

所以你想生成两个日期之间的所有日期时间?

你只需要一个查询!

只需将日期之间的差异乘以24即可。然后为每行添加一个小时 (1/24):

var sDate varchar2(10);
var endDate varchar2(10);

exec :sDate := '01-01-2019';
exec :endDate := '03-01-2019';

select to_date ( :sDate,'dd-mm-yyyy' ) + 
         ( level / 24 ) dt
from   dual
connect by level <= ( 24 + ( 24 * 
    ( to_date(:endDate,'dd-mm-yyyy') - 
        to_date(:sDate,'dd-mm-yyyy') )
  ) 
) ;

DT                     
01-JAN-2019 01:00:00   
01-JAN-2019 02:00:00   
01-JAN-2019 03:00:00   
... 
03-JAN-2019 22:00:00   
03-JAN-2019 23:00:00   
04-JAN-2019 00:00:00   

72 rows selected. 

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论