如何使用日期、小时和分钟计算 oracle 表单中的总时间?
How to calculate total time in oracle forms using date, hour and minute?
需要帮助!
我正在研究 Oracle Forms 10g。我创建了一个表格,其中有 7 个字段:
前3个字段,即日期格式的from_date
,数字格式的from_hour
和from_minute
。
接下来的 3 个字段接受 to_date
、to_hour
和 to_minute
.
From_hour
和 to_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 块)。
需要帮助!
我正在研究 Oracle Forms 10g。我创建了一个表格,其中有 7 个字段:
前3个字段,即日期格式的from_date
,数字格式的from_hour
和from_minute
。
接下来的 3 个字段接受 to_date
、to_hour
和 to_minute
.
From_hour
和 to_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 块)。