【问题标题】:Oracle Duration FunctionOracle 持续时间函数
【发布时间】:2010-11-28 12:19:50
【问题描述】:

为什么我的 PL/SQL 持续时间函数不能正常工作?在下面的查询中,我以与下面的函数相同的方式手动计算“hh:mm”。但是,我得到了不同的结果。

调用查询:

WITH durdays AS (SELECT SYSDATE - (SYSDATE - (95 / 1440)) AS durdays FROM DUAL)
SELECT TRUNC (24 * durdays) AS durhrs,
       MOD (TRUNC (durdays * 1440), 60) AS durmin,
       steven.duration (SYSDATE - (95 / 1400), SYSDATE) duration
  FROM durdays

输出:

durhrs:   1
durmin:   35
duration: '1:38'

功能代码:

CREATE OR REPLACE FUNCTION steven.duration (d1 IN DATE, d2 IN DATE)
   RETURN VARCHAR2 IS
   tmpvar   VARCHAR2 (30);
   durdays   NUMBER (20,10); -- Days between two DATEs
   durhrs   BINARY_INTEGER; -- Completed hours
   durmin   BINARY_INTEGER; -- Completed minutes
BEGIN
   durdays   := d2-d1; 
   durhrs   := TRUNC(24 * durdays);   
   durmin   := MOD (TRUNC(durdays * 1440), 60);
   tmpvar   := durhrs || ':' || durmin;
   RETURN tmpvar;
END duration;
/

【问题讨论】:

    标签: sql oracle plsql duration


    【解决方案1】:

    我想你可能有一个小错字:

    WITH durdays AS (SELECT SYSDATE - (SYSDATE - (95 / 1440)) AS durdays FROM DUAL)
                                                       ^^^^
    SELECT TRUNC (24 * durdays) AS durhrs,
           MOD (TRUNC (durdays * 1440), 60) AS durmin,
           lims_sys.duration (SYSDATE - (95 / 1400), SYSDATE) duration
                                              ^^^^
    

    一旦修复,它就可以正常工作了:

    SQL> WITH durdays AS (SELECT SYSDATE - (SYSDATE - (95 / 1440)) AS durdays FROM DUAL)
      2  SELECT TRUNC (24 * durdays) AS durhrs,
      3         MOD (TRUNC (durdays * 1440), 60) AS durmin,
      4         duration (SYSDATE - (95 / 1440), SYSDATE) duration
      5    FROM durdays
      6  ;
    
        DURHRS     DURMIN DURATION
    ---------- ---------- ----------------
             1         34 1:34
    

    【讨论】:

    • 只需要第二双眼睛来看看它。谢谢!
    【解决方案2】:
    sql>set time on 
    

    然后你会得到如下提示:

    20:24:35 sql> 从 v$session 中选择计数(*); 数数(*) ------------ 78 20:24:50 sql>

    现在你可以知道查询时长是15秒的

    【讨论】:

    • 这个问题的答案是什么?
    猜你喜欢
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 2012-08-16
    • 2018-11-12
    • 1970-01-01
    • 2020-09-24
    相关资源
    最近更新 更多