Я пытаюсь прочитать базу данных оракулов приложения Borland Starteam и заметил, что они представляют свою дату в виде числа (16,10).Я думаю, что это не отметка времени или эпоха.Например, у меня есть номер: 37137.4347569444, как я могу прочитать его как дату?
Я увидел, что в базе данных есть хранимая процедура, CONVERT_DATE:
CREATE OR REPLACE procedure STARBASE.convert_date
( number_of_days IN integer
, nDate OUT number)
is
nDateOffset number;
CurrentDate date;
Month integer;
Day integer;
year number;
success boolean := false;
bLeapYear boolean:=false;
nDaysInMonths number;
nLeapDays integer;
fDate number (16,10);
rgMonthDays number(5,0);
begin
select sysdate - number_of_days
into CurrentDate
from dual;
nDateOffset := 693959;
select to_number(substr((TO_CHAR (CurrentDate, 'MM-DD-YYYY')) , 1, 2), '99') - 1
into month
from dual;
select to_number(substr((TO_CHAR (CurrentDate, 'MM-DD-YYYY')) , 4, 2), '99') - 1
into day
from dual;
select to_number(substr((TO_CHAR (CurrentDate, 'MM-DD-YYYY')) , 7, 4), '9999')
into year
from dual;
if ( mod(year , 4) = 0 )
and ( ( mod(year , 400) = 0) or ( mod(year , 100) <> 0 ))
then
bLeapYear :=true;
end if;
nLeapDays := 0;
if ( bLeapYear = true) and ( Day = 28) and ( Month = 1 )
then
nLeapDays := 1;
end if;
select substr(to_char(last_day(CurrentDate) , 'DD-MM-YYYY') , 1 , 2)
into nDaysInMonths
from dual;
if Month = 0 then
rgMonthDays := 0;
elsif Month = 1 then
rgMonthDays := 31;
elsif Month = 2 then
rgMonthDays := 59;
elsif Month = 3 then
rgMonthDays := 90;
elsif Month = 4 then
rgMonthDays := 120;
elsif Month = 5 then
rgMonthDays := 151;
elsif Month = 6 then
rgMonthDays := 181;
elsif Month = 7 then
rgMonthDays := 212;
elsif Month = 8 then
rgMonthDays := 243;
elsif Month = 9 then
rgMonthDays := 273;
elsif Month = 10 then
rgMonthDays := 304;
elsif Month = 11 then
rgMonthDays := 334;
elsif Month = 12 then
rgMonthDays := 365;
end if;
nDate := Year*365 + Year/4 - Year/100 + Year/400 + rgMonthDays + Day + 1;
if( Month < 2 ) and ( bLeapYear = true) then
nDate := nDate - 1;
end if;
nDate := nDate - nDateOffset;
exception
when others then raise;
end convert_date;
Я не знаюкак это использовать.
как я могу это прочитать?Пожалуйста помоги.спасибо