在oracle数据库中将数字保存为01而不是1

时间:2015-05-26 09:55:35

标签: oracle types oracle11g numbers

我做了这个程序,把一天中的所有时间(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?

2 个答案:

答案 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;

但正如其他人所说,您通常不希望将时间分别存储在日期信息中。