我有一个很长的文字,如"acbshdh2015128dfg2015009;jsg2015070"
。它包含一些Julian日期,例如"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') )
然而,结果是错误的。
答案 0 :(得分:1)
你确定表达朱利安日期(你的意思是“正常”日期)? 请查看维基百科:Julian day
我认为你不能在纯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
(为了避免任何混淆而提及:13th of February 805 A.D.
)