我有一个CSV文件,其中包括CST和CDT。
例如:
07-MAR-2017 11:00:00 PM CST
03-OCT-2017 11:00:00 PM CDT
CSV中的日期字段被存储为VARCHAR2(30)。
目标日期字段需要转换为下面显示的格式:
MM/DD/YYYY hh:mm
考虑到源文件中有两个时代,我们该如何在Oracle中进行此转换?
请帮助。
谢谢
蒂娜
使用TO_TIMESTAMP_TZ
将其读取为TIMESTAMP WITH TIME ZONE
数据类型。如果要将其转换为公共时区,请使用AT TIME ZONE 'UTC'
将其转换为UTC时区(例如)。
sql小提琴
Oracle 11G R2架构设置:
CREATE TABLE your_table ( value ) AS
SELECT '07-Mar-2017 11:00:00 PM CST' FROM DUAL UNION ALL
SELECT '03-Oct-2017 11:00:00 PM CDT' FROM DUAL UNION ALL
SELECT '03-Oct-2017 11:00:00 PM CST' FROM DUAL;
查询1 :
SELECT TO_CHAR(
TO_TIMESTAMP_TZ(
value,
'DD-MON-YYYY HH12:MI:SS AM TZD',
'NLS_DATE_LANGUAGE=American'
) AT TIME ZONE 'UTC',
'MM-DD-YYYY HH24:MI'
) AS utc_time
FROM your_table
结果:
| UTC_TIME |
|------------------|
| 03-07-2017 23:00 |
| 10-03-2017 23:00 |
| 10-03-2017 23:00 |