如果您不能更改文件中的數據格式,在加載之前無法操作的文件,你可以替換範圍價值US/Eastern
(或任何合適的特定EDT值像America/New_York
值)an SQL operator:
"DOC_DATE_ADDED" TIMESTAMP WITH TIME ZONE "DY MON DD HH24:MI:SS TZR YYYY"
"REPLACE(:DOC_DATE_ADDED, 'EDT', 'US/Eastern')"
(分成兩行的可讀性,但你可以做的是,在控制文件也是如此)。
當你的樣本數據文件被加載表包含:
select to_char(doc_date_added, 'YYYY-MM-DD HH24:MI:SS TZD') as TZD,
to_char(doc_date_added, 'YYYY-MM-DD HH24:MI:SS TZR') as TZR
from my_table;
TZD TZR
----------------------- ------------------------------
2013-03-07 14:27:14 EST 2013-03-07 14:27:14 EST
2013-03-07 14:27:27 EST 2013-03-07 14:27:27 EST
2013-04-09 18:20:54 EDT 2013-04-09 18:20:54 US/EASTERN
2013-04-09 18:24:26 EDT 2013-04-09 18:24:26 US/EASTERN
...所以你保留EST/EDT分割;雖然TZR
顯示US/EASTERN
和EST
- 所以它可能是更好的改變EST
價值,以及與嵌套REPLACE
或:
"DOC_DATE_ADDED" TIMESTAMP WITH TIME ZONE "DY MON DD HH24:MI:SS TZR YYYY"
"REGEXP_REPLACE(:DOC_DATE_ADDED, 'E[SD]T', 'US/Eastern')"
或者,如果所有的值總是EST/EDT,你可以做時間戳轉換明確,只是切出你給出的實際字符串:它加載您的數據
"DOC_DATE_ADDED" CHAR "FROM_TZ(TO_TIMESTAMP(SUBSTR(:DOC_DATE_ADDED, 1, 19)
|| SUBSTR(:DOC_DATE_ADDED, 25, 29), 'DY MON DD HH24:MI:SS YYYY'), 'US/Eastern')"
:
TZD TZR
----------------------- ------------------------------
2013-03-07 14:27:14 EST 2013-03-07 14:27:14 US/EASTERN
2013-03-07 14:27:27 EST 2013-03-07 14:27:27 US/EASTERN
2013-04-09 18:20:54 EDT 2013-04-09 18:20:54 US/EASTERN
2013-04-09 18:24:26 EDT 2013-04-09 18:24:26 US/EASTERN
這樣做的危險是,如果您曾經在不同的時區獲得價值,它會默默地記錄在錯誤的地區,而第一個版本將成功處理或拒絕,取決於它是否被識別(即在Wernfried的第一份名單中)。