jyfx1@ORA> select sysdate from dual;
SYSDATE
--------------
13-4月 -16
jyfx1@ORA> alter session set NLS_date_FORMAT='yyyy-mm-dd amhh12:mi:ss';
会话已更改。
jyfx1@ORA> select sysdate from dual;
SYSDATE
-----------------------
2016-04-13 上午11:25:39
jyfx1@ORA> alter session set NLS_date_FORMAT='yyyy-mm-dd hh24:mi:ss';
jyfx1@ORA> SELECT a.last_login_time
2 FROM b_psbc_users a
3 WHERE a.account='admin';
LAST_LOGIN_TIME
-------------------
2016-04-13 11:07:36
SYSDATE
--------------
13-4月 -16
jyfx1@ORA> alter session set NLS_date_FORMAT='yyyy-mm-dd amhh12:mi:ss';
会话已更改。
jyfx1@ORA> select sysdate from dual;
SYSDATE
-----------------------
2016-04-13 上午11:25:39
jyfx1@ORA> alter session set NLS_date_FORMAT='yyyy-mm-dd hh24:mi:ss';
jyfx1@ORA> SELECT a.last_login_time
2 FROM b_psbc_users a
3 WHERE a.account='admin';
LAST_LOGIN_TIME
-------------------
2016-04-13 11:07:36
今天想设置一下NLS_DATE_FORMAT参数来更改一下date参数的输出格式,但是遇到了问题:
SQL> select sysdate from dual;
SYSDATE
---------
07-NOV-08
---------
07-NOV-08
刚开始SPFILE里没有配置NLS_DATE_FORMAT参数的,用了ALTER SYSTEM ... SCOPE=SPFILE居然报错:
SQL> alter system set nls_date_format='YYYY-MM-DD' scope=spfile;
alter system set nls_date_format='YYYY-MM-DD' scope=spfile
ORA-02096: specified initialization parameter is not modifiable with this option
alter system set nls_date_format='YYYY-MM-DD' scope=spfile
ORA-02096: specified initialization parameter is not modifiable with this option
但是使用ALTER SESSION是可以的:
SQL> alter session set nls_date_format='yyyy-mm-dd';
Session altered.
SQL> select sysdate from dual;
SYSDATE
----------
2008-11-07
----------
2008-11-07
在查阅文档后,发现这个参数确实不能通过ALTER SYSTEM命令来修改:
You can alter the default value of NLS_DATE_FORMAT by:
■ Changing its value in the initialization parameter file and then restarting the
instance
■ Using an ALTER SESSION SET NLS_DATE_FORMAT statement
■ Changing its value in the initialization parameter file and then restarting the
instance
■ Using an ALTER SESSION SET NLS_DATE_FORMAT statement
--《Globalization Support Guide》
修改了SPFILE,加进了NLS_DATE_FORMAT参数:
SQL> select name,value,isspecified from v$spparameter where name='nls_date_format';
NAME VALUE ISSPEC
---------- ---------- -------------------------
nls_date_format YYYY-MM-DD TRUE
---------- ---------- -------------------------
nls_date_format YYYY-MM-DD TRUE
虽然Oracle里的参数换了,但是查询后的显示结果任然是一样的:
SQL> select sysdate from dual;
SYSDATE
---------
07-NOV-08
---------
07-NOV-08
在HKEY_LOCAL_MACHINE-SOFTWARE-ORACLE-HOME0中加入NLS_DATE_FORMAT键值后,查询正常:
SQL> select sysdate from dual;
SYSDATE
----------
2008-11-07
----------
2008-11-07
看来NLS_DATE_FORMAT参数主要还是受到OS的影响,每次登录时会将OS的NLS_DATE_FORMAT参数加载进去。
基本上除了修改环境变量就只能通过alter session来修改了,暂时还没有找到好一点的办法。
要注意并不单是显示上的问题,而是在内部存储的值也会被覆盖:
SQL> select to_date(to_char(sysdate,'yyyy-mm-dd')) from dual;
select to_date(to_char(sysdate,'yyyy-mm-dd')) from dual
*
ERROR at line 1:
ORA-01861: literal does not match format string
select to_date(to_char(sysdate,'yyyy-mm-dd')) from dual
*
ERROR at line 1:
ORA-01861: literal does not match format string
在没有修改环境变量或session参数时,这个语句是无法执行的。修改后可以执行:
SQL> select to_date(to_char(sysdate,'yyyy-mm-dd')) from dual;
TO_DATE(TO
----------
2008-11-10
----------
2008-11-10
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26701168/viewspace-2080340/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26701168/viewspace-2080340/