今天在创建图时遇到关于NLS_DATE_FORMAT的错误,貌似客户的数据库的NLS_DATE_FORMAT值是’YYYYMMDD’,而我们数据库的NSL_DATE_FORMAT值是’DD-MON-RR’,导致在创建视图后视图不能筛出数据,视图的script类似于这样的写法:
select * from t where fire_date>=’20091126’;
由于前面的fire_date是DATE型,如果>=后面的值没有采用to_date进行格式化而直接用字串的形式的话,字串的格式必须和数据库的NLS_DATE_FORMAT一致,如NLS_DATE_FORMAT的值是DD-MON-RR的话,>=后面的值就应该是’26-11月-09’;
于是想到修改NLS_DATE_FORMAT的值,
1. 只修改session的DATE格式
SQL> alter session set nls_date_format='YYYY-MM-DD';
SQL> select sysdate from dual;
SYSDATE
----------
2009-11-26
2. 修改数据库的DATE默认格式
alter system set nls_date_format=’YYYYMMDD’ scope=spfile;
修改失败……..
在网上查阅了下,以以下方法成功修改:
运行regedit打开注册表,在注册表的HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME下新增字串值NLS_DATE_FORMAT,值设置为你想修改的格式,如’YYYY-MM-DD HH24:MI:SS’,修改成功,无需重启任何服务。
SQL> select sysdate from dual;
SYSDATE
-------------------
2009-11-26 16:16:44
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10314474/viewspace-620661/ ,如需转载,请注明出处,否则将追究法律责任。