我做了这个程序,把一天中的所有时间(24小时制)放在一张桌子里。
create or replace
procedure fill_time as
l_hour number(2) :=0;
l_minute number(2):=0;
l_hourminute varchar2(5);
BEGIN
while l_hour<=23 loop
while l_minute<=59 loop
l_hourminute :=to_char(l_hour)||':'||to_char(l_minute);
insert into times(hour,minute, hourminute) values(l_hour, l_minute,l_hourminute);
l_minute:=l_minute+1;
END LOOP;
l_minute:=0;
l_hour:=l_hour+1;
END LOOP;
END;
现在它工作正常,除了时间之外的所有时间都存储为0:0。如何确保将其存储为00:00?
答案 0 :(得分:2)
更改
l_hourminute :=to_char(l_hour)||':'||to_char(l_minute);
要:
l_hourminute :=TRIM(to_char(l_hour, '09'))||':'||TRIM(to_char(l_minute, '09'));
答案 1 :(得分:1)
除了奇怪的需要将00:00到23:59的小时数插入一张桌子(为什么?!请详细说明你的要求,我对它非常好奇!),你不需要要做一个程序 - 你可以在一个插入语句中轻松完成:
insert into times (hour,minute, hourminute)
select to_char(trunc(sysdate) + (level - 1)/(24*60), 'hh24') hr,
to_char(trunc(sysdate) + (level - 1)/(24*60), 'mi') min,
to_char(trunc(sysdate) + (level - 1)/(24*60), 'hh24:mi') hourminute
from dual
connect by level <= 24*60;
但正如其他人所说,您通常不希望将时间分别存储在日期信息中。