需要帮助!
我正在研究oracle表格10g。我创建了一个表单,其中有7个字段:
前三个字段,即日期格式的from_date
,数字格式的from_hour
和from_minute
。
接下来的3个字段接受to_date
,to_hour
和to_minute
。
From_hour
和to_hour
。
最后一个字段是total_time
,它通过计算字段和字段的差异以 HH.MM 格式显示结果。
我无法解决这个问题。任何形式的帮助都非常感谢。
谢谢!
答案 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块)。