首先查一下自己的oracle的字符集
select * from v$nls_parameters;
我按照一般的方法
alter session set nls_date_language='SIMPLIFIED CHINESE/american/Japanese/Korean';
我是在Navicat里面测试一下有没有用,发现完全没问题,很开心。
然后测试成功后直接运行sql文件,发现依旧报非法月份ORA-01843: not a valid month,最后想到了我们改变的是session,也就是会话级别,我在查询窗口改变了字符集,那么也就是说只有在查询窗口里这条命令才会生效。想通之后,我就在sql的文件头增加了改变字符集sql语句,就没有问题了。
后面有人说这种临时改变这种字符集的方法不适用于真正的项目,根据实际需求来吧。我搜了下,找了方法借鉴下,下面这个没有测过。
SELECT TO_CHAR(SYSDATE,'DY') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'DAY','NLS_DATE_LANGUAGE = ''SIMPLIFIED CHINESE''') from dual;
SELECT TO_CHAR(SYSDATE,'DAY','NLS_DATE_LANGUAGE = American') from dual;
SELECT TO_CHAR(SYSDATE,'DAY','NLS_DATE_LANGUAGE = Korean') from dual;
或者用kettle做一下日期的转换,我想这种应该也可行吧。