Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Konvertieren Sie das Dezimaljahr in das Datum

Wenn Sie davon ausgehen, dass der Dezimalanteil nach der Anzahl der Tage im angegebenen Jahr berechnet wurde (d. h. 365 oder 366, je nachdem, ob es ein Schaltjahr war), könnten Sie etwa so vorgehen:

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