如何在oracle中将短时区的varchar转换为时间戳



我们在varchar2列中存储的日期为"Tue Dec 18 16:49:31 EST 2018",我想将其转换为时间戳。已尝试使用to_timestamp('Tue Dec 18 16:49:31 EST 2018','DY Mon DD HH24:MI:SS TS YYYY'),但不起作用。请帮忙。

如果你想保留时区信息,你必须使用TO_TIMESTAMP_TZ,否则你可以这样做:

SELECT
TO_TIMESTAMP_TZ(
REGEXP_REPLACE(
'Tue Dec 18 16:49:31 EST 2018', 
'w+ (w+) (d+) (dd:dd:dd) (w+) (d+)', 
'5-1-2 3 4'
), 
'YYYY-Mon-DD HH24:MI:SS TZR',
'NLS_DATE_LANGUAGE=American'),
TO_TIMESTAMP(
REGEXP_REPLACE(
'Tue Dec 18 16:49:31 EST 2018', 
'w+ (w+) (d+) (dd:dd:dd) w+ (d+)', 
'4-1-2 3'
), 
'YYYY-Mon-DD HH24:MI:SS',
'NLS_DATE_LANGUAGE=American')
FROM DUAL;

但是,对于EDT,它将失败,请参阅:

SELECT TZNAME, TZABBREV, TZ_OFFSET(TZNAME) 
FROM V$TIMEZONE_NAMES 
WHERE TZNAME IN ('EST','EDT')

您可以使用REPLACE('Tue Dec 18 16:49:31 EDT 2018', 'EDT', 'EST5EDT')使其工作。

最新更新