--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>
问题解决