修改PL SQL日期顯示格式的方法

2021-06-18 11:36:17 字數 1518 閱讀 1930

oracle中的timestamp資料型別很多人用的都很少,所以即使最簡單的乙個查詢返回的結果也會搞不清楚到底這個時間是什麼時間點。

例如:27-1月 -08 12.04.35.877000 上午

這個時間到底是幾點呢?中午12:04分,那就錯了,其實使用to_char函式轉換後得到如下結果:

2008-01-27 00:04:35:877000

說明這個時間是凌晨的00:04分,而不是中午的12:04分。

發生此問題的原因如下:

示例:select to_char(to_date('2008-01-29 00:05:10', 'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh:mi:ss am') from dual

首先把乙個00:05分的時間進行轉換,按照'yyyy-mm-dd hh:mi:ss am'格式進行轉換,得到的結果是:

2008-01-29 12:05:10 上午

這說明oracle在進行日期轉換成字串的過程中,如果小時轉換使用的是12進製的格式,則凌晨00點會被認為是上午12點,然後才是上午1點、2點、3點。。。

oracle中12進製的計時不是從0-11,而是從1-12的,所以如果是夜裡零點,你不能記成1點,那只能記成12點了。(不知道這是不是跟洋人的習慣有關?)

現在我們來看一下oracle中對timestamp的處理:

select value from nls_session_parameters where parameter = 'nls_timestamp_format'

返回結果dd-mon-rr hh.mi.ssxff am,可以看到,這裡預設情況下,使用的timestamp的格式是12進製的小時。  www.2cto.com  

問題到這裡已經找到根源了。

解決方法:

找到登錄檔:

[hkey_local_machine\software\oracle\home0]

。。。"nls_timestamp_format"="yyyy-mm-dd hh24:mi:ss:ff6" 

。。。在登錄檔中設定oracle環境變數的地方(也就是設定oracle_home的地方)設定nls_timestamp_format的格式(也就是建立這樣乙個字串項,然後設定它的值為你轉換需要的掩碼,我一般設定為yyyy-mm-dd hh24:mi:ss:ff6),然後關掉pl/sql developer,重新登入,如果沒有效果,重啟電腦。

pl/sql developer中讀取的是登錄檔中設定的nls_timestamp_format格式,那麼只要在登錄檔中設定oracle環境變數的地方(也就是設定oracle_home的地方)設定nls_timestamp_format的格式(也就是建立這樣乙個字串項,然後設定它的值為你轉換需要的掩碼,我一般設定為yyyy-mm-dd hh24:mi:ss:ff6),然後關掉pl/sql developer,再繼續登陸,以後我們看到的timestamp時間就會自動轉換成大家需要的格式了。

另一種方式:

或者直接修改 pl/sqldeveloper 裡的 nls options 的設定

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

在資料庫裡查詢資料的時候,我們經常會遇到一些和日期時間格式的問題,比如顯示語言,顯示格式等。可能資料在資料庫裡面存放的格式是 yyyy mm dd hh24 mi ss,但我們查詢出來的卻是 22 1月 10,第一反應可能是字符集出了問題。其實還有乙個原因就是系統環境變數沒有設定,下面我們就來看下有...

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

修改sqlplus中顯示時間日期的格式 收藏 在資料庫裡查詢資料的時候,我們經常會遇到一些和日期時間格式的問題,比如顯示語言,顯示格式等。可能資料在資料庫裡面存放的格式是 yyyy mm dd hh24 mi ss,但我們查詢出來的卻是 22 1月 10,第一反應可能是字符集出了問題。其實還有乙個原...

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

在資料庫裡查詢資料的時候,我們經常會遇到一些和日期時間格式的問題,比如顯示語言,顯示格式等。可能資料在資料庫裡面存放的格式是 yyyy mm dd hh24 mi ss,但我們查詢出來的卻是 22 1 月 10,第一反應可能是字符集出了問題。其實還有乙個原因就是系統環境變數沒有設定,下面我們就來看下...