当前位置: 首页 > article >正文

oracle FUNCTION(任意两个时间 之间的工作小时)

写函数计算 任意两个时间 之间的工作小时
每天工作时间(8:00 - 20:00 共12小时),没有休息日

 CREATE OR REPLACE FUNCTION SC_YD_DESI.CALCULATE_WORK_HOURS_FUNC (
    p_current_time IN DATE,
    p_order_time IN DATE
) RETURN NUMBER
AS
    p_work_hours NUMBER := 0;
    p_work_time DATE := p_order_time;
    v_hours NUMBER := 0;
BEGIN
    -- 计算第一天的工作时间
    IF TRUNC(p_current_time) >= TRUNC(p_work_time) THEN
        IF TO_NUMBER(TO_CHAR(p_current_time, 'HH24')) >= 8 AND TO_NUMBER(TO_CHAR(p_current_time, 'HH24')) < 20 THEN
            v_hours := (p_current_time - p_work_time) * 24 ;
        ELSIF TO_NUMBER(TO_CHAR(p_current_time, 'HH24')) >= 20 THEN
            v_hours := 20 - (TO_NUMBER(TO_CHAR(p_work_time, 'HH24')) + TO_NUMBER(TO_CHAR(p_work_time, 'MI')/60)); -- 20:00到次日08:00共计12小时
        END IF;
        p_work_hours := p_work_hours + v_hours ;
        p_work_time := p_work_time + 1;
    END IF;

    -- 计算中间整天的工作时间
    WHILE TRUNC(p_work_time) < TRUNC(p_current_time) LOOP
        p_work_hours := p_work_hours + 12;
        p_work_time := p_work_time + 1;
    END LOOP;

    -- 计算最后一天的工作时间
    IF TRUNC(p_work_time) = TRUNC(p_current_time) THEN
        IF TO_NUMBER(TO_CHAR(p_current_time, 'HH24')) >= 8 AND TO_NUMBER(TO_CHAR(p_current_time, 'HH24')) < 20 THEN
            v_hours := (p_current_time - (TRUNC(SYSDATE) + INTERVAL '8' HOUR)) * 24 ;
        ELSIF TO_NUMBER(TO_CHAR(p_current_time, 'HH24')) >= 20 THEN
            v_hours := 12; 
        END IF;
        p_work_hours := p_work_hours + v_hours ;
        p_work_time := p_work_time + 1;
    END IF;

    RETURN p_work_hours;
END CALCULATE_WORK_HOURS_FUNC;

调用函数结果:

SELECT SC_YD_DESI.CALCULATE_WORK_HOURS_FUNC(
    TO_DATE('2022-11-10 23:00:00', 'YYYY-MM-DD HH24:MI:SS'),
    TO_DATE('2022-11-07 10:50:00', 'YYYY-MM-DD HH24:MI:SS')
) AS work_hours
FROM DUAL;

在这里插入图片描述


http://www.kler.cn/a/154576.html

相关文章:

  • MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并
  • C++初阶——日期类的实现
  • 蓝桥杯-洛谷刷题-day3(C++)
  • Linux运维常用命令
  • Javascript_设计模式(二)
  • 探索大规模语言模型(LLM)在心理健康护理领域中的应用与潜力
  • 游戏被流量攻击会有什么样的影响,该用什么样的防护方式去处理
  • 07-原型模式-C语言实现
  • 2022年9月6日 Go生态洞察:Go的漏洞管理新支持
  • 基于Cocos2D-X框架闯关游戏的设计
  • acwing算法基础之贪心--排序不等式、绝对值不等式和推公式
  • 【LeetCode热题100】【双指针】移动零
  • Asp.Net Core Web Api内存泄漏问题
  • 阿里云域名解析到非默认端口处理方式
  • Uniapp Vue3 基础到实战 教学视频
  • 计算机毕业设计 基于Web的铁路订票管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • Kafka常见面试题
  • 苹果mac屏幕投屏镜像工具AirServer2024
  • uni-app x生成的安卓包,安装时,提示不兼容。解决方案
  • JTag 提取NXP固件脚本示例
  • 使用wininet下载一个网页
  • 进程间通信 管道
  • 用两个队列实现栈
  • QT 中 QProgressDialog 进度条窗口 备查
  • mazing是什么软件?为什么选择iMazing
  • 【Redis】Redis的内部设计与实现