--oracle中在转换 字符类型的时间数据有时会报错 ORA-01843: 无效的月份
如:
SQL> select to_date('07-SEP-2017','dd-mon-yy') from dual;
select to_date('07-SEP-2017','dd-mon-yy') from dual
ORA-01843: 无效的月份
SQL>
这个问题是输入的字符和数据库默认的时间格式不匹配导致。
查询本地nls_data_language的值,是简体中文
SELECT value FROM v$parameter WHERE name = 'nls_date_language';
SIMPLIFIED CHINESE
故如果字符串格式如下可以转换成功:
SQL> select to_date('07-9月-2017','dd-mon-yy') from dual;
TO_DATE('07-9月-2017','DD-MON-
------------------------------
2017/9/7
SQL>
--但是如果实际字符串就是07-SEP-2017这种英文格式的,则需要修改nls_data_language参数
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
但是一般我们不想要修改系统参数,可以通过在查询层加上该参数解决。
SQL> select to_date('07-SEP-2017','dd-mon-yy', 'nls_date_language = AMERICAN') from dual
2 ;
TO_DATE('07-SEP-2017','DD-MON-
------------------------------
2017/9/7
SQL>
问题解决
如:
SQL> select to_date('07-SEP-2017','dd-mon-yy') from dual;
select to_date('07-SEP-2017','dd-mon-yy') from dual
ORA-01843: 无效的月份
SQL>
这个问题是输入的字符和数据库默认的时间格式不匹配导致。
查询本地nls_data_language的值,是简体中文
SELECT value FROM v$parameter WHERE name = 'nls_date_language';
SIMPLIFIED CHINESE
故如果字符串格式如下可以转换成功:
SQL> select to_date('07-9月-2017','dd-mon-yy') from dual;
TO_DATE('07-9月-2017','DD-MON-
------------------------------
2017/9/7
SQL>
--但是如果实际字符串就是07-SEP-2017这种英文格式的,则需要修改nls_data_language参数
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
但是一般我们不想要修改系统参数,可以通过在查询层加上该参数解决。
SQL> select to_date('07-SEP-2017','dd-mon-yy', 'nls_date_language = AMERICAN') from dual
2 ;
TO_DATE('07-SEP-2017','DD-MON-
------------------------------
2017/9/7
SQL>
问题解决
本文解决Oracle数据库中因字符类型的时间数据格式与系统默认格式不匹配而导致的ORA-01843错误。通过调整日期语言设置或直接在查询中指定正确的格式来避免此问题。
3万+

被折叠的 条评论
为什么被折叠?



