需要帮助!
我正在研究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
,它通过计算从字段到字段的差异来显示 hh.mm 格式中的结果。
我无法完成。高度赞赏任何类型的帮助。
谢谢!
不良设计。您应该只有一个项目和价值的一项,可以接受完整的日期时间格式。我建议您解决这个问题。
同时,将这些对转换为真实的日期格式;使用适合您情况的格式面膜。这是一个例子:
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块当然只有一个(即一个声明部分,一个开始 - 末端块(。