`

NLS_DATE_FORMAT参数

阅读更多
   今天想设置一下NLS_DATE_FORMAT参数来更改一下date参数的输出格式,但是遇到了问题:

SQL> select sysdate from dual;

SYSDATE
---------
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 SESSION是可以的:

SQL> alter session set nls_date_format='yyyy-mm-dd';

Session altered.

SQL> select sysdate from dual;

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


    虽然Oracle里的参数换了,但是查询后的显示结果任然是一样的:

SQL> select sysdate from dual;

SYSDATE
---------
07-NOV-08

    WINDOWS系统,要修改注册表,machine/software/oracle/home0里把nls_date_format的值改成yyyy-mm-dd,没有的话就新建一个字符串值(linux中,在.bash_profile中加入export NLS_DATE_FORMAT,Windows也可以设置环境变量),查询正常:

SQL> select sysdate from dual;

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

    在没有修改环境变量或session参数时,这个语句是无法执行的。修改后可以执行:

SQL> select to_date(to_char(sysdate,'yyyy-mm-dd')) from dual;

TO_DATE(TO
----------
2008-11-10

注:把参数NLS_DATE_FORMAT设置成yyyy-mm-dd,查询的过滤条件中date类型的字段就可以跟日期控件生成的时间字符串直接比较了,非常方便的,如果对查询速度要求高,可以给日期类型的字段创建一个基于函数的索引。

两种方式:设置环境变量;修改注册表。
分享到:
评论
1 楼 christ_shen 2011-11-09  
哥, 你是神,我找了N久,结果是注册表的问题,一针见血

相关推荐

    Oracle的NLS_DATE_FORMAT设置(日期格式设置)_ITPUB博客.mhtml

    Oracle的NLS_DATE_FORMAT设置(日期格式设置)_ITPUB博客.mhtml

    如何解决ORA-01843与NLS_DATE_FORMAT问题

    本文将详细介绍如何解决ORA-01843与NLS_DATE_FORMAT问题,需要的朋友可以参考下

    ORACLE构架体系.

    通过设置init.ora文件的NLS_DATE_FORMAT参数来取代日期格式,否则查询时,日期以 DD-MON-YY格式表示,如13-APR-99表示1999.4.13 NUMBER可变长度数值列,允许值为0、正数和负数。NUMBER值通常以4个字节或更少的字节...

    oracle 10.2.0.1 精简客户端.msi.zip

    1、本软件可作为简单的Oracle10g客户端使用,包括:tnsping、exp、imp、sqlldr、sqlplus、tkprof(新增)等功能,如对客户端功能有更高的使用要求,请安装...>在注册表中加入NLS_DATE_FORMAT、NLS_TIMESTAMP_FORMAT等环

    oracle 10.2.0.1 精简客户端

    1、本软件可作为简单的Oracle10g客户端使用,包括:tnsping、exp、imp、sqlldr...>在注册表中加入NLS_DATE_FORMAT、NLS_TIMESTAMP_FORMAT等环境变量 >修改了注册表中Oracle_Home写死路径的BUG >完善一些错误消息提示

    oracle详解

    NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUAGE AMERICAN NLS_SORT BINARY NLS_TIME_FORMAT HH.MI.SSXFF AM NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZH:TZM NLS_...

    PL/SQL 类型格式转换

    TO_CHAR(date[,’format_model'[,nlsparams]]) 第二个参数可以省略,不指定格式,按系统默认格式输出。 区分大小写。 使用FM(在格式控制符前添加)符号可以去掉空格或是首位的零。 如果指定了NLSPARAMS,则它控制...

    SQL查询语句优化总结

    1 前言 2 2 总纲 2 第一掌 避免对列的操作 3 ...第十三掌 使用nls_date_format 8 第十四掌 使用基于函数的索引 8 第十五掌 基于函数的索引要求等式匹配 9 第十六掌 使用分区索引 9 第十七掌 使用位图索引 9

    Oracle用户被锁的原因及解决办法

    SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; Session altered. 2、查看具体的被锁时间 SQL> select username,lock_date from dba_users where username='TEST'; USERNAME LOCK_DATE TEST ...

    使用Oracle数据库登录时被告知用户被锁怎么解决

    SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';  Session altered.  2、查看具体的被锁时间 SQL> select username,lock_date from dba_users where username='TEST';  USERNAME LOCK_DATE  ...

    Oracle数据库账号被锁定解决方法

    找到账号被锁按时候 哄骗sqlplus或者sqldeveloper,查询账号被锁定的时候,相干语句如下: –批改当前会话的日期显示格局 alter session set nls_date_format = “”yyyy-MM-dd hh24:mi:ss””; –查询被锁定账号的...

    Win8下DG物理Standby搭建

    2、验证archive log是否接收和applied SQL> alter session set nls_datE_format='YYYY-MM-DD HH24:MI:SS'; SQL> select SEQUENCE#,DEST_ID,ARCHIVED,APPLIED,DELETED,STATUS,FIRST_TIME from v$archived_log order ...

    Oracle9i的init.ora参数中文说明

    nls_date_format: 说明: 指定与 TO_CHAR 和 TO_DATE 函数一同使用的默认日期格式。该参数的默认值由 NLS_TERRITORY 确定。该参数的值可以是包含在双引号内的任何有效的日期格式掩码。例如: ''MMM/DD/YYYY''。 值...

    oracle资料库函式库

    /* This Query will be sent directly after the first connection Example: var $ConnectQuery="ALTER SESSION SET nls_date_language=german nls_date_format=’DD.MM.RRRR’"; -> Set the date format for this ...

    jsp+oracle

    讲解了关于jsp+oracel的实例 cmd下指令: exp jsp/jsp@orcl file=c:\jsp.dmp log=c:\jsp....alter session set NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss' cmd下指令: sqlldr userid=jsp/jsp control=C:\input.ctl

    PLSQL Developer 8.0.3.1510 中文注册版下载

    * Export Tables would change nls_date_format in single session mode and dual session mode * Auto Replace now supports Undo to continue with "non replaced" text * Debugger can now show PL/SQL Table ...

    oracle - answer

    (4) ALTET SESSION SET NLS_DATE_FORMAT=’YYYY-MM-DD HH24:MI:SS’ Ch6 (1) ALTER TABLESPACE USER ADD DATAFILE ‘D:\ORACLE\ORADATA\ORCL\userdata03.dbf’ SIZE 50M’; (2) ALTER TABLESPACE EXAMPLE ...

    Oracle练习.txt

    alter session set nls_date_format='yyyymmddhh24miss'; 8.怎么可以看到数据库有多少个tablespace? select * from dba_tablespaces; 9.如何显示当前连接用户? SHOW USER 10.如何测试SQL语句执行所用的时间? SQL>...

    Oracle8i_9i数据库基础

    §2.5.11 SHOW ALL(列出所有参数) 85 §2.6 格式化输出 87 §2.6.1 一般数据的格式化输出 87 §2.6.2 日期的格式化输出 88 §2.7 加标题 89 §2.8 建立简单报告 90 §2.9 输入变量 91 第三章 表及索引的定义操作 94 ...

Global site tag (gtag.js) - Google Analytics