2013-06-26 159 views
0

的Oracle 11g文檔中說,默認的日期格式爲DD-MON-YYYY,這意味着如果我使用插入日期日期列:Oracle日期格式

insert into table t values(1, '02-JAN-2013') 

,然後選擇它

select * from t 

它應該顯示爲02-JAN-2013,而實際上它顯示日期爲01/02/2013。

爲什麼他的差距還是我失去了一些東西。

Ref。 http://infolab.stanford.edu/~ullman/fcdb/oracle/or-time.html

僅供參考。我正在使用PL/SQL Developer進行這個實驗。

回答

1

這要看的NSL_DATE_FORMAT依賴的NLS_TERRITORY

給看看到:http://docs.oracle.com/cd/B19306_01/server.102/b14237/initparams122.htm

+0

如果是這樣,那麼爲什麼我必須使用特定的格式,而日期對比情況:EG。從search_instance si中選擇si.effective_date,其中si.effective_date> '26 -JUN-2013'order by si.effective_date。如果不使用'26 -JUN-2013'我使用'06/26/2013',它會說'不是有效的月份'。 – user204069

+0

我試着總是使用ansi日期格式:'YYMMDDHHMISS',我不必檢查數據庫使用的格式。然後我可以使用'si.effective_date>'20130626000000'' – Aguardientico

2

確實沒有針對該產品的默認日期格式,該reference guide指出,在系統級的默認NLS_DATE_FORMAT基於NLS_TERRITORY。雖然this說'標準'是'DD-MON-RR',我想這就是如果你沒有在數據庫級別指定一個值,至少在我工作的平臺上,你會得到什麼。

當你創建一個新的數據庫初始化參數可以包括特定NLS_DATE_FORMAT,並且以後可以變過。

但是系統級NLS_DATE_FORMAT可以被客戶端,會話或TO_CHAR調用覆蓋。您可以查看v$nls_parameters以查看系統值,並查看nls_session_parameters查看您當前的會話值。如果你願意,你可以用alter session來改變它。

我很肯定你會發現PL/SQL Developer將會話NLS_DATE_FORMAT設置爲MM/DD/YYYY的某個位置。

一般來說,最好不要依賴於價值可言,始終使用顯式格式掩碼顯示,例如TO_CHAR(<column>, 'YYYY-MM-DD HH24:MI:SS')

全球化指南herehere中有更多NLS_DATE_FORMAT;還有一點關於日期顯示here;和日期格式模型元素的概述here

+0

這樣的情況下,爲什麼我必須使用特定的格式,而日期的比較:例如。從search_instance si中選擇si.effective_date,其中si.effective_date> '26 -JUN-2013'order by si.effective_date。如果不使用'26 -JUN-2013'我使用'06/26/2013',它會說'不是有效的月份'。 – user204069

+1

爲了回答您的意見,請閱讀我的答案[這裏](http://stackoverflow.com/questions/10178292/comparing-dates-in-oracle-sql/10178346#10178346)或者[這裏](HTTP://計算器。com/questions/15970277 /與-date-in-oracle-sql/15970516#15970516)(我相信亞歷克斯有很多)@ user204069 ...你不***比較日期,你在比較字符串。 _總是顯式地將字符串轉換爲日期比較的日期。 – Ben

+1

@ user204069 - 你的會話價值是多少?你正在做一個從字符串到日期的隱式轉換,你應該避免它,因爲它是不明確的。你應該使用'to_date('06/26/2013','MM/DD/YYYY')'。或者可能'日期'2013-06-26'',使用ANSI日期文字。 –