如何解决Oracle 报表中的日期计算
我正在从 DATE_IN
(16-NOV-20 06:02 PM
) 中减去 DATE_OUT
(17-NOV-20 03:23 PM
)。我希望答案是 21.21
(小时.分钟),但它给了我 21.34
,这是正确的小时数但不是正确的分钟数。我做错了什么?
function TIME_CALCULATIONFormula return NUMBER is
begin
RETURN ROUND((((:DATE_OUT - :DATE_IN)*24)*60)/60,2);
end;
解决方法
该值正确为 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;
dbfiddle here
,您得到的结果是不是“小时.分钟”——它是小时的十进制表示。 0.34 小时是 20 分 24 秒,这似乎是您想要的结果,直到您强制要求的小数点后两位的舍入误差。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。