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

时间:2018-02-22 05:06:32

标签: oracle oracle10g oracleforms

需要帮助!

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

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

以24HH格式接受

From_hourto_hour

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

糟糕的设计。对于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块)。