如何使用日期、小时和分钟计算 oracle 表单中的总时间?

How to calculate total time in oracle forms using date, hour and minute?

需要帮助!

我正在研究 Oracle Forms 10g。我创建了一个表格,其中有 7 个字段:

前3个字段,即日期格式的from_date,数字格式的from_hourfrom_minute。 接下来的 3 个字段接受 to_dateto_hourto_minute.

From_hourto_hour 接受 24HH 格式。

最后一个字段是total_time,通过计算from字段和to字段的差异,以HH.MM格式显示结果。

我无法解决这个问题。非常感谢任何形式的帮助。

谢谢!

糟糕的设计。对于 FROM 和 TO 值,您应该只有一个项目,它将接受完整的日期时间格式。我建议你解决这个问题。

同时,将这些对转换为真正的日期格式;使用适合您情况的格式掩码。这是一个例子:

declare
  l_from date := to_date(to_char(:from_date, 'dd.mm.yyyy') ||' '||
                         lpad(:from_hour, 2, '0')          ||':'||
                         lpad(:from_minute, 2, '0'),
                         'dd.mm.yyyy hh24:mi');
  l_to   date := the same, just for TO values
  l_diff number;
begin
  l_diff := l_to - l_from;   -- it is number of DAYS
  ...
end;

因为 L_DIFF 表示两个日期之间的天数(因为这是减去它们时得到的),您现在必须将其转换为小时(通过将它乘以 24,因为有 24小时),而对于分钟,您需要乘以 60(因为一小时有 60 分钟)。

这是一个如何做到这一点的例子:假设相差 0.3 天。然后就是

SQL> with test as (select 0.3 days from dual)
  2  select trunc(days * 24)                      as hours,
  3         ((days * 24) - trunc(days * 24)) * 60 as minutes
  4  from test;

     HOURS    MINUTES
---------- ----------
         7         12

在表单中,这将是

declare 
  l_hours   number;
  l_minutes number;
  l_total   varchar2(10);
begin
  l_hours   := trunc(l_diff * 24);
  l_minutes := ((l_diff * 24) - trunc(l_diff * 24)) * 60;

  l_total   := lpad(to_char(l_hours), 2, '0') ||':'|| 
               lpad(to_char(l_minutes), 2, '0');
end;

那两个 PL/SQL 块当然只是一个(即一个 DECLARE 部分,一个 BEGIN-END 块)。