Oracle to_date returns 错误 01843

Oracle to_date returns an error 01843

当尝试执行 select 语句时 returns 出错。格式化似乎是正确的。请指出我错在哪里。

SELECT to_date (CALL_DATE,'DD-MON-YYYY HH24:MI') AS DATET FROM XXXXXX

其中 CALL_DATE 是 VARCHAR2 类型的列,其中日期存储为 12-Jan-2017 12:04.

它returns我

  1. 00000 - "not a valid month".

如果数据库中的日期是 12-Jan-2017 12:04,那么您的查询应该是

SELECT to_date (CALL_DATE,'DD-Mon-YYYY HH24:MI') AS DATET FROM XXXXXX

而不是

SELECT to_date (CALL_DATE,'DD-MON-YYYY HH24:MI') AS DATET FROM XXXXXX

SELECT to_date ('12-Jan-2017 12:04','DD-MON-YYYY HH24:MI') AS DATET FROM DUAL;

返回

数据

2017 年 1 月 12 日

如果 CALL_DATE 确实采用 '12-Jan-2017 12:04' 格式,那么函数调用应该没有问题。

使用

SELECT to_date (RTRIM(LTRIM(CALL_DATE)),'DD-MON-YYYY HH24:MI') AS DATET FROM XXXXXX.

如果您以这种方式使用 to_date,您将依赖于您所处环境的语言。

如果您使用 'Jan',则您假设您使用的语言中 January 可能写为 'Jan',因此您可能需要明确设置用于解释的语言日期。

例如,假设我的语言是意大利语,那么 'January' 写成 'Gen' 而不是 'Jan';如果尝试您的查询,我得到同样的错误:

SQL> SELECT to_date ('12-Jan-2017 12:04', 'DD-MON-YYYY HH24:MI') AS DATET
  2  FROM DUAL;
SELECT to_date ('12-Jan-2017 12:04', 'DD-MON-YYYY HH24:MI') AS DATET
                *
ERROR at line 1:
ORA-01843: not a valid month

如果我明确说出用于解释存储日期的语言,我有:

SQL> SELECT to_date ('12-Jan-2017 12:04', 'DD-MON-YYYY HH24:MI', 'NLS_DATE_LANGUAGE = English') AS DATET
  2  FROM DUAL;

DATET
---------
12-GEN-17

谢谢大家的帮助。问题是一些用户错误地存储了日期。

Select to_char(to_date(call_time,'dd-mon-yyyy hh:mi'),'dd-mon-yyyy hh:mi') from xxxx;