我有一个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
答案 0 :(得分:2)
您的问题是该列
所以转换如下:
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年范围内)。