(т.е. 365 или 366 в зависимости от того, был ли это високосный год), вы можете сделать что-то вроде этого:

я есть даты в таблице, которыехранится в десятичных годах, Примером является2003.024658 что переводится какJanuary 9, 2003. Я хотел бы преобразовать десятичные годы в формат даты Oracle.

Я нашел кого-то, кто сделал это в Excel:Десятичная формула года к дате?

 =DATE(INT(B1),1,MOD(B1,1)*(DATE(INT(B1)+1,1,1)-DATE(INT(B1),1,1)))

Однако я не могу понять, как преобразовать логику в Oracle PL / SQL.

 Niranjan Rajawat27 нояб. 2017 г., 07:04
Можете ли вы объяснить логику преобразования2003.024658 вJanuary 9, 2003 ?
 Nitish27 нояб. 2017 г., 07:21
SELECT TO_DATE ('31-DEC-2002') + (0.024658 * 365) FROM DUAL дает вывод09-Jan-2003.
 Nitish27 нояб. 2017 г., 08:00
Не требуется. Если это помогло вам, этого достаточно.
 Used_By_Already27 нояб. 2017 г., 08:14
Пожалуйста, примите этот ответ, чтобы другие, кто хочет получить ответ, знали, что он есть, или те, кто хочет дать ответ, не разочаровываются.
 Jeffrey Kemp28 нояб. 2017 г., 00:51
Если вы хотите, чтобы ответ был точным, это будет зависеть от того, как именно десятичная часть (0.024658) изначально рассчитывался тем, кто записывал значения в первую очередь - например, по простым 365 дням в году, или какой-то средней оценке, такой как 365,24, или, возможно, какой-то другой схеме.

Ответы на вопрос(1)

Решение Вопроса

что десятичная часть была рассчитана в соответствии сколичество дней в данном году (т.е. 365 или 366 в зависимости от того, был ли это високосный год), вы можете сделать что-то вроде этого:

with
 q1 as (select 2003.024658 d from dual)
,q2 as (select d
              ,mod(d,1) as decimal_portion
              ,to_date(to_char(d,'0000')||'0101','YYYYMMDD')
               as jan01
        from q1)
,q3 as (select q2.*
              ,add_months(jan01,12)-jan01 as days_in_year
        from q2)
select d
      ,decimal_portion * days_in_year as days
      ,jan01 + (decimal_portion * days_in_year) as result
from   q3;

d: 2003.024658
days: 9.00017
result: 10-JAN-2003 12:00am

Ваш ответ на вопрос