2
讓我們創建一個測試表來說明這個問題:TO_CHAR函數返回,Oracle數據庫中的零10g快捷10.2.0.1.0
CREATE TABLE "TMP1" (
"X" VARCHAR2(256 BYTE) NOT NULL
) LOGGING NOCOMPRESS NOCACHE;
INSERT INTO "TMP1" VALUES ('XxYyyyZzzWww_123456_0106201395810_0106201395810.csv');
INSERT INTO "TMP1" VALUES ('XxYyyyZzzWww_123456_31052013155754_31052013155754.csv');
INSERT INTO "TMP1" VALUES ('XxYyyyZzzWww_123456_02062013130000_02062013130000.csv');
現在提出一個要求:
select
TMP2.X
, TMP2.STARTDATETIME
, to_char(TMP2.STARTDATETIME, 'DDMMYYYYHH24MISS') "to_char(StartDateTime)"
, TMP2.ENDDATETIME
, to_char(TMP2.ENDDATETIME, 'DDMMYYYYHH24MISS') "to_char(EndDateTime)"
from (
select
"X"
, to_date(case length(regexp_substr("X", '\d+', 1, 2, 'i'))
when 14 then regexp_substr("X", '\d+', 1, 2, 'i')
when 13 then substr(regexp_substr("X", '\d+', 1, 2, 'i'), 0, 8)
|| '0' || substr(regexp_substr("X", '\d+', 1, 2, 'i'), 9)
end, 'DDMMYYYYHH24MISS') StartDateTime
, to_date(case length(regexp_substr("X", '\d+', 1, 3, 'i'))
when 14 then regexp_substr("X", '\d+', 1, 3, 'i')
when 13 then substr(regexp_substr("X", '\d+', 1, 3, 'i'), 0, 8)
|| '0' || substr(regexp_substr("X", '\d+', 1, 3, 'i'), 9)
end, 'DDMMYYYYHH24MISS') EndDateTime
from
"TMP1"
) TMP2;
在在這個查詢中,我們剪出一個子字符串並將其轉換爲日期。然後我們嘗試進行反向轉換,但不起作用。
結果:
to_date
功能工作,但功能to_char
沒有。
示例顯示該查詢一般工作正常http://sqlfiddle.com/#!4/2615c/1 – psaraj12