Oracle to_date返回错误01843

时间:2017-03-03 08:38:17

标签: sql oracle formatting to-date

尝试执行select语句时会返回错误。格式似乎正确。请指出我误解的地方。

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

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

它让我回头

  
      
  1. 00000 - “不是有效月份”。
  2.   

5 个答案:

答案 0 :(得分:0)

如果数据库中的日期为response,则您的查询应为

12-Jan-2017 12:04

而不是

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

答案 1 :(得分:0)

选择to_date(' 2017年1月12日12:04',' DD-MON-YYYY HH24:MI')作为DATET来自DUAL;

返回

DATET

12-JAN-17

如果CALL_DATE真的采用“2017年1月12日12:04'”的格式,那么

不应该是函数调用的问题。

使用

SELECT to_date(RTRIM(LTRIM(CALL_DATE)),' DD-MON-YYYY HH24:MI')来自XXXXXX的数据集。

答案 2 :(得分:0)

如果您以这种方式使用to_date,那么您依赖的是环境语言。

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

例如,说我的语言是意大利语,所以'1月'写成'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

答案 3 :(得分:0)

谢谢大家的帮助。问题是一些用户存储着日期。

答案 4 :(得分:0)

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