ITPub博客

首页 > 数据库 > Oracle > NLS_DATE_FORMAT参数详解

NLS_DATE_FORMAT参数详解

Oracle 作者:牛肉面之歌 时间:2014-06-10 21:18:25 0 删除 编辑

  一、问题的引出

  NLS_DATE_FORMAT参数用于设置日期显示格式,设置的方式有多种,不同的方式也会带来不同的结果。

  我们知道,参数的设置是有优先级的,日期格式的参数设置也不例外。优先级如下(低到高):

  ● 初始化参数 < 系统环境变量 < 会话级(session)< 函数

  我们先来查看系统默认的日期显示方式:

  SQL> select sysdate from dual;

  SYSDATE

  --------------

  31-DEC-12

  下面我们通过几种设置方式来对NLS_DATE_FORMAT参数进行修改。

  二、初始化参数设置

  查看该参数的值:

  SQL> show parameter nls_date_format

  NAME TYPE VALUE

  ------------------------------------ --------------------------------------------------------------

  nls_date_format string

  可以看到,未设置时,value为空,即使用系统默认设置,也可以通过以下方式查看:

  SQL> select name,value,isspecified fromv$spparameter where name='nls_date_format';

  NAME VALUE ISSPECIFIED

  ------------------------------ --------------------------------------------------

  nls_date_format FALSE

  对于初始化参数的设置其实也有几种方式

2.1、修改init$ORACLE_SID.ora文件

  ● 方法一: 在初始化参数文件中追加:

  [oracle@localhostdbs]$ vi init$ORACLE_SID.ora

  NLS_DATE_FORMAT='yyyy-Month-dd'

  因为初始化参数文件只有在启动数据库的时候才被载入,所以我们要重启数据库,如果存在spfile.ora文件,则要在关闭数据库的时候重建spfile文件。

  关闭数据库:

  SQL> shutdown immediate

  Database closed.

  Databasedismounted.

  ORACLE instanceshut down.

  创建(或重建)spfile文件:

  SQL> create spfile from pfile;

  File created.

  启动数据库:

  SQL> startup

  ORACLE instancestarted.

  Total SystemGlobal Area 524288000 bytes

  Fixed Size 2022080 bytes

  VariableSize 180356416 bytes

  DatabaseBuffers 339738624 bytes

  RedoBuffers 2170880 bytes

  Databasemounted.

  Database opened.

  重新查询参数设置情况:

  SQL> show parameter nls_date_for

  NAME TYPE VALUE

  ------------------------------------ --------------------------------------------------------------

  nls_date_format string yyyy-Month-dd

  SQL> select name,value,isspecified fromv$spparameter where name='nls_date_format';

  NAME VALUE ISSPECIFIED

  -------------------- -------------------- --------------------

  nls_date_format yyyy-Month-dd TRUE

  查询当前系统时间,发现时间显示格式已经生效了:

  SQL> select sysdate from dual;

  SYSDATE

  -----------------

  2012-December -31

  当然,如果存在spfile文件,也可使用ALTERSYSTEM语句动态修改,但修改后同样需要重启数据库。

  ● 方法二: 动态修改spfile文件

  SQL> alter system setNLS_DATE_FORMAT='yyyy:mm:dd' scope=spfile;

  System altered.

  关闭数据库:

  SQL> shutdown immediate

  Database closed.

  Databasedismounted.

  ORACLE instanceshut down.

  这里可以顺便根据spfile内容来创建pfile文件:

  SQL> create pfile from spfile;

  File created.

  启动数据库:

  SQL> startup

  ORACLE instancestarted.

  Total SystemGlobal Area 524288000 bytes

  Fixed Size 2022080 bytes

  VariableSize 180356416 bytes

  DatabaseBuffers 339738624 bytes

  RedoBuffers 2170880 bytes

  Database mounted.

  Database opened.

  测试,查询日期:

  SQL> select sysdate from dual;

  SYSDATE

  --------------

  2012:12:31

  2.2、修改环境变量

  修改环境变量不需要重启数据库,只需要使环境变量生效即可。

  我们现在只在环境变量文件追加以下内容,看看结果怎样:

  [oracle@redhat4~]$ vi .bash_profile

  export NLS_LANG=AMERICAN_AMERICA.zhs16gbk

  [oracle@redhat4~]$ source .bash_profile

  我们可以发现,现在系统的时间显示格式又恢复到了默认,这是为什么呢?

  因为NLS_LANG参数同样会影响到NLS_DATE_FORMAT参数,只要存在NLS_LANG参数,Oracle就会使用环境变量的值(即使NLS_DATE_FORMAT),根据上面我们提到的优先级,所以初始化参数文件设置的值会被忽略,但由于环境变量中NLS_DATE_FORMAT并没有设置,所以Oracle还是使用了默认的格式。

  SQL> select sysdate from dual;

  SYSDATE

  ------------

  31-DEC-12

  下面我们把NLS_DATE_FORMAT也设置上去,追加:

  [oracle@redhat4~]$ vi .bash_profile

  exportNLS_DATE_FORMAT='yyyy-mm-dd HH24:MI:SS'

  [oracle@redhat4~]$ source .bash_profile

  查询系统时间:

  SQL> select sysdate from dual;

  SYSDATE

  -------------------------

  2012-12-3101:47:57

  2.3、修改会话级参数

  如果修改会话级参数,则会忽略前面所修改的值,但会话级设置的值也只有在此会话中有效。

  SQL> alter session setNLS_DATE_FORMAT='HH24:MI:SS dd/mm/yyyy';

  Session altered.

  SQL> select sysdate from dual;

  SYSDATE

  -------------------------

  01:53:0031/12/2012

  2.4、函数中改变日期格式

  函数修改的级别最高,但只是在此次函数结果中生效。

  SQL> select to_char(sysdate,'fmDdspth"of" Month Year fmHH:MI:SS AM') "Date" from dual;

  Date

  ---------------------------------------------------------------------------

  Thirty-First ofDecember Twenty Twelve 02:02:19 AM



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29424472/viewspace-1180013/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-01-04

  • 博文量
    76
  • 访问量
    115102