Regex 在长文本中以正常日期显示儒略日期

Regex 在长文本中以正常日期显示儒略日期,regex,oracle,oracle-sqldeveloper,Regex,Oracle,Oracle Sqldeveloper,我有一个像acbshdh2015128dfg2015009的长文本;jsg2015070。它包含一些朱利安日期,如2015128、2015009和2015070。我想在这个长文本acbshdh05082015dfg01092015中像正常日期一样显示它们;jsg03112015。 我想通过Oracle SQL实现它。有什么建议吗 我喜欢这样做 REGEXP_REPLACE( ColumnName, '[[:digit:]]{10}', to_char(to_date(to_number(REGE

我有一个像acbshdh2015128dfg2015009的长文本;jsg2015070。它包含一些朱利安日期,如2015128、2015009和2015070。我想在这个长文本acbshdh05082015dfg01092015中像正常日期一样显示它们;jsg03112015。 我想通过Oracle SQL实现它。有什么建议吗

我喜欢这样做

REGEXP_REPLACE( ColumnName, '[[:digit:]]{10}', to_char(to_date(to_number(REGEXP_SUBSTR(ColumnName,'[[:digit:]]{10}')),J),'MM/DD‌​/YYYY HH:MI:SS') ) 

但是,结果是错误的。

你确定朱利安日期这个表达吗?你所说的正常日期是什么意思? 请看一下维基百科:

我认为不能用纯SQL实现,必须编写如下PL/SQL函数:

CREATE OR REPLACE FUNCTION ConvertJulianDate(str IN VARCHAR2) RETURN VARCHAR2 IS
    res VARCHAR2(1000) := str;  
BEGIN
    FOR i IN 1..REGEXP_COUNT(str, '\d+') LOOP
        res := REGEXP_REPLACE(res, '\d+', TO_CHAR(TO_DATE(REGEXP_SUBSTR(str, '\d+', 1, i), 'J'), 'mmddyyyy'), 1, i);
    END LOOP;
    RETURN res;
END;

SELECT ConvertJulianDate('acbshdh2015128dfg2015009;jsg2015070') FROM dual;

acbshdh02130805dfg10170804;jsg12170804

仅作澄清:朱利安日期2015128表示0805-02-13,以避免任何混淆:公元805年2月13日。

您到目前为止做了什么?有一个oracle函数可以将朱利安日期转换为正常日期。我现在所坚持的是正确识别长文本中任何朱利安日期的方法。你有什么建议吗?我是这样做的:下面是REGEXP\u REPLACE ColumnName,[[:digit:]{10}',to_charto\u dateto\u numberREGEXP\u SUBSTRColumnName,[[:digit:]{10}',J,'MM/DD/YYYY HH:MI:SS',然而,结果是错误的。