问题:
如何将开始时间和结束时间的一行剪切为多天花费小时的行
表数据和 DDL:
starttime , endtime
2019/05/03 08:00:00 , 2019/05/05 12:00:00
CREATE TABLE T ("starttime" timestamp, "endtime" timestamp);
INSERT INTO T ("starttime", "endtime") VALUES ('03-May-2019 08:00:00 AM', '05-May-2019 12:00:00 PM');
预期结果:
Date , SpendHour
2019/05/03 , 16
2019/05/04 , 24
2019/05/05 , 12
Online Demo Link | DB Fiddle
最佳答案
您可以使用 connect by level <=
语法结合 case..when
声明
select trunc(t.starttime+level-1) as "Date",
case
when trunc(t.starttime+level-1) = trunc(t.starttime) then
extract(hour from trunc(t.starttime+level)
-greatest(t.starttime,trunc(t.starttime+level-1)))
when trunc(t.starttime+level-1) = trunc(t.endtime) then
extract(hour from t.endtime-trunc(t.endtime))
else
24
end as "Spend hour"
from t
connect by level <= extract(day from t.endtime - t.starttime)+1;
关于sql - 如何将一行削减到开始时间和结束时间到多天花费的小时行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55964111/