oracle字元型別時間轉換 ORA-01843 無效的月份
阿新 • • 發佈:2019-01-27
--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>
問題解決