在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 年范围内的日期)。
我有一个 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 年范围内的日期)。