1. 程式人生 > >oracle字元型別時間轉換 ORA-01843 無效的月份

oracle字元型別時間轉換 ORA-01843 無效的月份

--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> 



問題解決