我们将日期存储在varchar2列中为“ Tue Dec 18 18:49:31 EST 2018”,我想将其转换为时间戳。尝试过to_timestamp('Tue Dec 18 16:49:31 EST 2018','DY Mon DD HH24:MI:SS TS YYYY')
,但不起作用。请帮忙。
答案 0 :(得分:0)
如果您想保留时区信息,则必须使用TO_TIMESTAMP_TZ
,否则可以这样:
SELECT
TO_TIMESTAMP_TZ(
REGEXP_REPLACE(
'Tue Dec 18 16:49:31 EST 2018',
'\w+ (\w+) (\d+) (\d\d:\d\d:\d\d) (\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+) (\d\d:\d\d:\d\d) \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')
使其正常工作。