修改sqlplus中顯示時間日期的格式

victorymoshui發表於2011-12-29

在資料庫裡查詢資料的時候,我們經常會遇到一些和日期時間格式的問題,比如顯示語言,顯示格式等。可能資料在資料庫裡面存放的格式是:YYYY-MM-DD HH24:MI:SS, 但我們查詢出來的卻是 22-1-10, 第一反應可能是字符集出了問題。 其實還有一個原因就是系統環境變數沒有設定,下面我們就來看下有關這個的配置問題。

 

1.  session 中修改

 

1. 1 中英文的切換

SQL> alter session set NLS_DATE_LANGUAGE='SIMPLIFIED CHINESE';

 

會話已更改。

 

SQL> select sysdate from dual;

 

SYSDATE

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

22-1 -10

 

SQL> alter session set NLS_DATE_LANGUAGE='AMERICAN';

 

會話已更改。

 

SQL> select sysdate from dual;

 

SYSDATE

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

22-JAN-10

 

SQL>

 

1.2 時間格式的切換

 

SQL> alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';

 

會話已更改。

 

SQL> select sysdate from dual;

 

SYSDATE

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

2010-01-22 14:30:21

 

SQL>



2. 
在作業系統中設定相關環境變數



2.1 windows 平臺


C:> SET NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS

C:> SET NLS_DATE_LANGUAGE=AMERICAN

C:>SEET NLS_DATE_LANGUAGE=SIMPLIFIED CHINESE;

 

注意:這裡YYYY-MM-DD HH24:MI:SS不能加引號,但在unix系統中要加

SQL> select sysdate from dual;
SYSDATE

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

2010-01-22 14:33:21



 這樣改了以後只對當前的控制檯窗品有效,如果不想每次都設定,就修改系統/使用者環境變數,新增一個變數,比如nls_date_format,值為YYYY-MM-DD HH24:MI:SS 就可以了。

 

2.2 Linux 平臺

$export  NLS_DATE_FORMAT=”YYYY-MM-DD HH24:MI:SS”

$export  NLS_DATE_LANGUAGE=”AMERICAN”

$export  NLS_DATE_LANGUAGE=”SIMPLIFIED CHINESE”

 

注:在unix系統中要加引號

 

Export 只對當前session 有效,如果要長期儲存,就需要修改.bash_profile 引數,比如Oracle使用者的,/home/oracle/.bash_profile, 在該檔案中加入相關引數以後就可以了。

 

NLS_DATE_FORMAT=”YYYY-MM-DD HH24:MI:SS”; 

export NLS_DATE_FORMAT;

NLS_DATE_LANGUAGE=”AMERICAN”; 

      export NLS_DATE_LANGUAGE;

NLS_DATE_LANGUAGE=”SIMPLIFIED CHINESE”;

  export NLS_DATE_LANGUAGE;

 

補充:

修改時間日期的格式並不單是顯示上的問題,而是在內部儲存的值也會被覆蓋: 

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 
---------- 
2010-1-22 

注:把引數NLS_DATE_FORMAT設定成yyyy-mm-dd,查詢的過濾條件中date型別的欄位就可以跟日期控制元件生成的時間字串直接比較了,非常方便的,如果對查詢速度要求高,可以給日期型別的欄位建立一個基於函式的索引。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9390331/viewspace-714176/,如需轉載,請註明出處,否則將追究法律責任。

相關文章