4

下面是一组应该是日期的样本数据。我不确定它应该是哪种格式,但有人告诉我它们是朱利安日期。

     DATE
    92017
    92320
    99002
    99003
    112010
    112011
    112012
    112013

任何人都可以将它们转换为 Oracle 日期吗?我试过了

select to_date(DATE,'J') from dual

但有些结果是在 1950 年代和 1940 年代,这对于我们正在处理的数据来说并不合适。我在这里做吗?

我还从这个链接尝试了这个公式:http ://www.kirix.com/stratablog/jd-edwards-date-conversions-cyyddd

SELECT 
TO_DATE(1900+(DATE/1000),1,1)+
TO_NUMBER(SUBSTR(TO_CHAR(DATE),4))-1  FROM DUAL;

谢谢

4

4 回答 4

5

-- 如果 DATE 是数字,则使用 JD Edwards 日期转换

select to_date(to_char(1900 + floor(DATE / 1000)),'YYYY') + mod(DATE,1000) - 1 from dual;

-- 如果 DATE 是字符串,则使用 JD Edwards 日期转换

select to_date(to_char(1900 + floor(to_number(DATE) / 1000)),'YYYY') + mod(to_number(DATE),1000) - 1 from dual;
于 2014-07-10T03:41:11.433 回答
3

我发现从 Julian 转换的最简单方法是:-

SELECT TO_CHAR(TO_DATE(your_julian_date,'JSP'),'dd-Mon-yyyy AD') AS DAY FROM dual;

此外,日期字段是数字还是字符串也没关系。如果是字符串,只需将 Julian 日期放在单引号内。

此外,儒略的 Oracle 定义是“自公元前 4712 年 1 月 1 日以来的天数”。(许多人错误地评论为公元前 4713 年)。参考:https ://asktom.oracle.com/pls/apex/asktom.search?tag=julian-date

于 2018-10-24T10:46:47.903 回答
1

如果您的日期字段是 varchar:

select TO_DATE(TO_CHAR(to_number('115032')+1900000),'YYYYDDD') jdedate from dual;

如果您的日期字段是一个数字:

select TO_DATE(TO_CHAR(115032+1900000),'YYYYDDD') jdedate from dual;

两者都返回:

JDEDATE
-----------
01/02/2015
于 2015-08-28T16:45:56.293 回答
-1

简单的

select to_date('0101'|| substr(TRN_REF_NO, 8,2), 'DDMMYY') + to_number(substr(TRN_REF_NO, 10,3)) - 1 Trn_dt
于 2019-04-04T08:36:41.973 回答