转换oracle

时间:2015-09-02 12:56:10

标签: oracle date julian-date

我有一个Oracle数据库表,其中包含5位数的Julian日期,我需要将其转换为日期时间格式。

示例数据

Source  Actual date
40786 ->    2015-09-01 |
40785 ->    2015-08-31 |

首先我尝试了以下

SELECT to_char(to_date(to_char(40786), 'J'),'DD-MM-YYYY'),
       to_char(to_date(to_char(40785), 'J'),'DD-MM-YYYY')
  FROM dual; 

40786 ->    4601-09-01 |
40785 ->    4601-08-31 |

由于它是错误的,我计算了天数差异(2416481)并制定了以下查询

SELECT to_char(to_date(to_char(40786 + 2416481  ), 'J'),'DD-MM-YYYY'),
       to_char(to_date(to_char(40785 + 2416481), 'J'),'DD-MM-YYYY')  
  FROM dual; 

40786 ->    2015-09-01 |
40785 ->    2015-08-31 |

这是正确的两天以上,但该表有自2010年以来的历史。上述调整是否适用于完整的历史记录。即周末,闰年等...

非常感谢。 V

1 个答案:

答案 0 :(得分:2)

您的问题是该列不存储在Julian日期。所以你不能问转换是否有效。 似乎日期基于1.1.1904(=第零天)

所以转换如下:

 select to_date('1904-01-01','yyyy-mm-dd') + 40786 as dt from dual;

 DT
 ---------- 
 01.09.2015

 select to_date('1904-01-01','yyyy-mm-dd') + 40785 as dt from dual;

 DT
 ---------- 
 31.08.2015

如果它真的有用,只能回答GUI转换例程中的代码。

是的,如果您信任合理的软件开发,您可以预期它会起作用(日期为+/- 100年范围内)。