Oracle to_date: ORA-01821: 无法识别日期格式

Oracle to_date: ORA-01821: date format not recognized

如何将此字符串转换为日期或时间戳?

'2014 年 11 月 4 日 10:16:20 AM -0500'

我试过了:

select to_date('04-Nov-2014 10:16:20 AM -0500', 'DD-MON-YYYY HH:MI:SS AM TZH') FROM dual;

给出错误:

ORA-01821: date format not recognized

需要使用TO_TIMESTAMP_TZ,可以解析时区信息:

SELECT
    TO_TIMESTAMP_TZ('04-Nov-2014 10:16:20 AM -0500', 'DD-MON-YYYY HH:MI:SS AM TZHTZM')
FROM dual;

Demo

Oracle 日期不保留任何时区信息,因此您必须使用时间戳。

数据类型DATE不支持任何时区信息,因此您必须使用数据类型TIMESTAMP WITH TIME ZONE才能使用它。您还应该考虑当前用户 NLS-Settings 设置的日期语言。

那么-5000不匹配TZH,试试这个:

select 
  TO_TIMESTAMP_TZ('04-Nov-2014 10:16:20 AM -0500', 'DD-MON-YYYY HH:MI:SS AM TZHTZM', 'NLS_DATE_LANGUAGE = American') 
FROM dual;