Возникла необходимость быстро написать небольшую выгрузку. Вот такая функция очень мне пригодилась. Прошу сильно ногами не пинать, изучал PL/SQL на ходу:
create or replace function toNormDate(adate in number) return date
is
god char(5);
mes char(3);
den char(3);
begin
if adate < 32 then
return null;
end if;
god := to_char(adate/65536, '9999');
mes := to_char(bitand(adate, 65280)/256, '09');
den := to_char(bitand(adate, 255), '09');
return(to_date(god || '/' || den || '/' || mes, 'YYYY/DD/MM'));
end toNormDate;
Работает достаточно быстро, полагаю можно использовать для выгрузок напрямую из БД!
FUNCTION GAL.MY_TO_ORADATE --Преобразование даты в формате Галактики (Integer) в формат Оракла без ошибки при 0
(
DATETIME IN INTEGER
) RETURN DATE AS
MM INTEGER;
YY INTEGER;
TMP INTEGER;
BEGIN
IF DATETIME IS NULL
THEN RETURN NULL;
END IF;
IF DATETIME = 0
THEN RETURN NULL;
END IF;
YY := DATETIME / 65536;
TMP := MOD(DATETIME,65536);
MM := TMP / 256;
TMP := MOD(TMP,256);
RETURN TO_DATE(TO_CHAR(TMP)||'.'||TO_CHAR(MM)||'.'||TO_CHAR(YY),'DD.MM.YYYY');
END;