首页 > 解决方案 > Oracle Reports 中的日期计算

问题描述

我从( ) 中减去DATE_IN( )。我希望答案是(小时.分钟),但它给了我正确的小时数而不是正确的分钟数。我究竟做错了什么?16-NOV-20 06:02 PMDATE_OUT17-NOV-20 03:23 PM21.2121.34

function TIME_CALCULATIONFormula return NUMBER is
begin
    RETURN ROUND((((:DATE_OUT - :DATE_IN)*24)*60)/60,2);
end;

标签: oracledateoracle11goracle10gdate-arithmetic

解决方案


该值正确为 0.34 小时 = 20.4 分钟。

如果你想返回小时作为单位和分钟作为小数,那么你可以使用:

function TIME_CALCULATIONFormula return NUMBER
is
  diff INTERVAL DAY TO SECOND := (:DATE_OUT - :DATE_IN) DAY TO SECOND;
begin
  RETURN EXTRACT( DAY FROM diff ) * 24
         + EXTRACT( HOUR FROM diff )
         + EXTRACT( MINUTE FROM diff ) / 100;
end;

或者

function TIME_CALCULATIONFormula return NUMBER
is
  diff INTERVAL DAY TO SECOND := CAST(:DATE_OUT AS TIMESTAMP)
                                 - CAST(:DATE_IN AS TIMESTAMP);
begin
  RETURN EXTRACT( DAY FROM diff ) * 24
         + EXTRACT( HOUR FROM diff )
         + EXTRACT( MINUTE FROM diff ) / 100;
end;

或者

function TIME_CALCULATIONFormula return NUMBER
is
begin
  RETURN TRUNC( ( :date_out - :date_in ) * 24 ) +
         MOD( ( :date_out - :date_in ) * 24 * 60, 60 ) / 100;
end;

或者,如果您不打算在 24 小时内出现时差,并且希望数字尾随零:

function TIME_CALCULATIONFormula return VARCHAR2
is
begin
  RETURN TO_CHAR( DATE '1900-01-01' + ( :date_out - :date_in ), 'HH24.MI' );
end;

db<>在这里摆弄


推荐阅读