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我
- 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;
当尝试执行 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我
- 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;