Преобразование юлианской даты в юлианскую дату JDE

Кто-нибудь знает, как преобразовать сегодняшнюю юлианскую дату (2456425) в юлианскую дату JDE (113133)?

Спасибо


person Jonno Lord    schedule 13.05.2013    source источник
comment
Почему это помечено как SQL Server и PL/SQL (Oracle)? Вы ищете решение как на TSQL, так и на PL/SQL? И может быть полезно упомянуть, что такое юлианская дата JDE.   -  person Pondlife    schedule 13.05.2013
comment
@Pondlife — Google — ваш друг здесь (хотя я согласен с тем, что OP должен был включать некоторые ссылки на этот фрагмент информации).   -  person Bob Jarvis - Reinstate Monica    schedule 13.05.2013
comment
@BobJarvis Да, конечно, но я думаю, что вопросы должны определять (или, по крайней мере, ссылаться) на любые термины, которые могут быть незнакомы широкой аудитории.   -  person Pondlife    schedule 14.05.2013


Ответы (1)


Мне кажется, что сегодняшняя юлианская дата (по крайней мере, с точки зрения Oracle) должна быть 2456426. Но, ладно, если в ваших условиях сегодня (13 мая 2013 г.) юлианская дата 2456425, то следующий код должен дать вам то, что вы хотите:

DECLARE 
  nJulian   NUMBER := 2456425;
  nCentury  NUMBER;
  nYear     NUMBER;
  nDay      NUMBER;
  nJDEdate  NUMBER;
BEGIN
  DBMS_OUTPUT.PUT_LINE('Date=' || TO_DATE(nJulian+1, 'J'));

  nCentury := TRUNC(TO_NUMBER(TO_CHAR(TO_DATE(nJulian+1, 'J'), 'YYYY')) / 100) - 19;

  DBMS_OUTPUT.PUT_LINE('nCentury=' || nCentury);

  nYear := TO_NUMBER(TO_CHAR(TO_DATE(nJulian+1, 'J'), 'YYYY')) - 
          (TRUNC(TO_NUMBER(TO_CHAR(TO_DATE(nJulian+1, 'J'), 'YYYY')) / 100) * 100);

  DBMS_OUTPUT.PUT_LINE('nYear=' || nYear);

  nDay := TO_NUMBER(TO_CHAR(TO_DATE(nJulian+1, 'J'), 'DDD'));

  DBMS_OUTPUT.PUT_LINE('nDay=' || nDay);

  nJDEdate := (nCentury * 100000) + (nYear * 1000) + nDay;

  DBMS_OUTPUT.PUT_LINE('nJDEdate=' || nJDEdate);
END;

Делитесь и наслаждайтесь.

person Bob Jarvis - Reinstate Monica    schedule 13.05.2013