【发布时间】:2020-09-15 18:22:59
【问题描述】:
我需要在Oracle 中返回两个日期之间的时间,除了周末的时间,我可以返回分钟。但是,当我设置周末日期时,我会收到 null 结果,而不是工作周的剩余时间。
首先,我们需要创建一个函数:
CREATE OR REPLACE FUNCTION get_bus_minutes_between (start_dt DATE, end_dt DATE)
RETURN NUMBER
IS
v_return NUMBER;
BEGIN
select sum(greatest(end_dt - start_dt,0)) * 24 * 60 work_minutes
into v_return
from dual
where trunc(start_dt) - trunc(start_dt,'iw') < 5; -- exclude weekends
RETURN v_return;
END;
案例 1 - 返回工作周中的分钟数 - 好的
工作周的开始和结束。
SELECT
"GET_BUS_MINUTES_BETWEEN"(TO_DATE('14-09-2020 06:00:00', 'dd-mm-yyyy hh24:mi:ss'),
TO_DATE('14-09-2020 10:00:00', 'dd-mm-yyyy hh24:mi:ss')) "WORK_MINUTES"
FROM
"SYS"."DUAL";
案例 2 - 返回工作周的剩余分钟数 - 失败 从周末开始,到工作周结束。
SELECT
"GET_BUS_MINUTES_BETWEEN"(TO_DATE('13-09-2020 06:00:00', 'dd-mm-yyyy hh24:mi:ss'),
TO_DATE('14-09-2020 10:00:00', 'dd-mm-yyyy hh24:mi:ss')) "WORK_MINUTES"
FROM
"SYS"."DUAL";
13-09-2020 是星期天,因此我预计返回时间为星期一的 600 分钟。
在这些可能性中,我们可以从工作日开始,到周末结束。
【问题讨论】:
标签: sql oracle datetime recursive-query