Oracle中timeStamp数据显示格式设定
Windows系统
可以通过配置环境变量完成(nls_date_format,nls_timestamp_format,nls_timestamp_tz_format),我们只需要在系统属性-高级-环境变量-系统变量
nls_date_format参数用于设置日期显示格式,设置的方式有多种,不同的方式也会带来不同的结果。参数的设置是有优先级的,日期格式的参数设置也不例外。优先级如下(低到高):初始化参数 < 系统环境变量 < 会话级(session)< 函数
在进入数据库中,使用show parameter nls显示如下。
SQL> show parameter nls
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
nls_calendar string
nls_comp string
nls_currency string
nls_date_format string
nls_date_language string
nls_dual_currency string
nls_iso_currency string
nls_language string SIMPLIFIED CHINESE
nls_length_semantics string BYTE
nls_nchar_conv_excp string FALSE
nls_numeric_characters string
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
nls_sort string
nls_territory string CHINA
nls_time_format string
nls_time_tz_format string
nls_timestamp_format string
nls_timestamp_tz_format string
1.用初始化参数来设置nls_date_format
检查是否设置了nls_date_format环境变量,从下面的结果可知并没有设置[[email protected] ~]$ export nls_date_format SQL>show parameter nls_date_format NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ nls_date_format string
修改参数nls_date_format
SQL> alter system set nls_date_format='yyyy-mm-dd hh24:mi:ss' scope=spfile; System altered. SQL> shutdow immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 327155712 bytes Fixed Size 1273516 bytes Variable Size 138412372 bytes Database Buffers 184549376 bytes Redo Buffers 2920448 bytes Database mounted. Database opened. SQL> show parameter nls_date_format NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ nls_date_format string yyyy-mm-dd hh24:mi:ss SQL> select sysdate from dual; SYSDATE ------------ 04-FEB-15
在修改参数nls_date_format后,我们查询系统时间并没有以'yyyy-mm-dd hh24:mi:ss'这种格式显式,因为NLS_LANG环境变量同样会影响到nls_date_format参数,只要存在NLS_LANG环境变量,Oracle就会使用环境变量的值(即使nls_date_format),根据上面我们提到的优先级,所以初始化参数文件设置的值会被忽略,但由于环境变量中nls_date_format并没有设置,所以Oracle还是使用了默认的格式。
现在设置NLS_LANG环境变量
[[email protected] ~]$ export NLS_LANG [[email protected] ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.5.0 - Production on Wed Feb 4 10:00:05 2015 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> show parameter nls_date_format NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ nls_date_format string yyyy-mm-dd hh24:mi:ss SQL> select sysdate from dual; SYSDATE ------------------- 2015-02-04 10:01:26
从上面的结果可以看到当我们去掉环境变量nls_lang后,查询系统时间就是以初始化参数nls_date_format的格式(yyyy-mm-dd hh24:mi:ss)来显示的
2.我们将参数nls_date_format设置为'yyyy-mm-dd hh24:mi:ss',将环境变量设置为'yy-mm-dd hh24:mi:ss'来观察它们的优先级
[[email protected] ~]$ export nls_date_format='yy-mm-dd hh24:mi:ss' [[email protected] ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.5.0 - Production on Wed Feb 4 09:44:07 2015 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> show parameter nls_date_format NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ nls_date_format string yyyy-mm-dd hh24:mi:ss SQL> select sysdate from dual; SYSDATE ----------------- 15-02-04 09:44:31
可以看到查询系统时间以是环境变量所设置的格式('yy-mm-dd hh24:mi:ss')来显示的。这就说明nls_date_format在环境变量中的设置比初始化参数的优先级高。
3.我们将参数nls_date_format设置为'yyyy-mm-dd hh24:mi:ss',环境变量设置为'yy-mm-dd hh24:mi:ss',并在会话级将nls_date_format设置为'dd-mm-yy hh24:mi:ss'
[[email protected] ~]$ export nls_date_format='yy-mm-dd hh24:mi:ss' [[email protected] ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.5.0 - Production on Wed Feb 4 09:44:07 2015 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. SQL> alter session set nls_date_format='dd-mm-yy hh24:mi:ss'; Session altered. SQL> show parameter nls_date_format NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ nls_date_format string yyyy-mm-dd hh24:mi:ss SQL> select sysdate from dual; SYSDATE ----------------- 04-02-15 09:50:01
从上面的结果可以看到查询系统时间是以会话级参数nls_date_format的格式(='dd-mm-yy hh24:mi:ss')来显示的,这就说明了nls_date_format参数的优先级为:会话级>环境变量>初始化参数
4.我们将参数nls_date_format设置为'yyyy-mm-dd hh24:mi:ss',环境变量设置为'yy-mm-dd hh24:mi:ss',并在会话级将nls_date_format设置为'dd-mm-yy hh24:mi:ss',使用函数来转换日期格式为'mm-dd-yy hh24:mi:ss'
[[email protected] ~]$ export nls_date_format='yy-mm-dd hh24:mi:ss' [[email protected] ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.5.0 - Production on Wed Feb 4 09:44:07 2015 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. SQL> alter session set nls_date_format='dd-mm-yy hh24:mi:ss'; Session altered. SQL> show parameter nls_date_format NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ nls_date_format string yyyy-mm-dd hh24:mi:ss SQL> select to_char(sysdate,'mm-dd-yy hh24:mi:ss') from dual; TO_CHAR(SYSDATE,' ----------------- 02-04-15 10:11:44
从上面的结果可以看到函数的优先级最高,这就证明了日期格式的优先级为:初始化参数 < 系统环境变量 < 会话级(session)< 函数