在oracle中转换5位日期

Convert 5 digit date in oracle

我有一个 Oracle 数据库 table,其中包含 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 |

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

非常感谢。 V

您的问题是该列不是 存储在 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 年范围内的日期)。