2015-10-26 115 views
2

我們使用Oracle 10.2.0.4.0數據庫,oracle表單生成器和報表生成器來創建表單和報表。oracle日期格式問題

現在問題出在我們的生產數據庫nls_date_format是dd-mon-rr格式。當開發人員在開發人員套裝中創建表單時,他們在表單級別提供dd-mm-rr格式,並且當表格中存儲的日期格式爲dd-mm-rr時。

現在,當開發人員運行窗體或報表生成器中它給DD-MM-RR format.but時相同的窗體或報表運行從應用程序的服務器端它給垃圾字符month.date和年印刷一樣僅日期格式月垃圾字符顯示。

希望大家指導好。

回答

2

有兩個問題。

當數據存儲在表中時,日期格式爲dd-mm-rr。

這是完全錯誤的。 Oracle不會以您看到的格式存儲日期,您看到的是display。 Oracle以7 bytes的內部專有格式存儲DATE,其中每個字節代表DATE的不同元素

Byte Description 
---- ------------------------------------------------- 
1  Century value but before storing it add 100 to it 
2  Year and 100 is added to it before storing 
3  Month 
4  Day of the month 
5  Hours but add 1 before storing it 
6  Minutes but add 1 before storing it 
7  Seconds but add 1 before storing it 

不要依賴於locale_specific NLS_DATE_FORMAT。始終使用:

  • TO_CHAR到你想要的格式
  • TO_DATE顯示日期字符串顯式轉換爲日期。

記住,TO_DATENLS依賴

如果你只有一個日期元素,如果你不計較時間元素,然後更好地利用ANSI日期文字遵循一定的固定格式'YYYY-MM-DD'。在垃圾字符

僅一個月顯示

這又是因爲你取決於NLS_DATE_LANGUAGE。正如我所說,你應該避免取決於區域設置特定的客戶端設置。明確提及NLS_DATE_LANGUAGE或使用ANSI日期文字如果您不關心時間元素。

例如,

SQL> SELECT TO_CHAR(SYSDATE, 'DD-MON-RR') dt FROM DUAL; 

DT 
--------- 
26-OCT-15 

SQL> alter session set nls_date_language='french'; 

Session altered. 

SQL> SELECT TO_CHAR(SYSDATE, 'DD-MON-RR') dt FROM DUAL; 

DT 
----------- 
26-OCT. -15 

那麼,究竟發生了上面?對於一個人使用法國nls_date_languageMONTH顯示垃圾價值。我們通過明確提及nls_date_language來讓它成爲NLS獨立。

SQL> SELECT TO_CHAR(SYSDATE, 'DD-MON-RR', 'nls_date_language=english') dt FROM DUAL; 

DT 
--------- 
26-OCT-15 

此外,NLS_LANG值可能無法正確在OS 環境變量設置。請參閱Why are junk values/special characters/question marks displayed on my client?

+0

我們已經在oracle表單中開發用於轉換DD-MM-RR但仍然存在問題的oracle表單中的to_char,但在oracle應用服務器端仍存在問題。 –

+0

@jayeshkamaliya我敢打賭,你依賴於客戶端的'NLS_DATE_LANGUAGE'。查看更新的示例。 –

+0

先生在我們的數據庫nls_language_date是在註冊表中NLS_LANG ameriacan和Oracle應用形式是GUJARATI_INDIA.UTF8這可能是這個問題的原因是什麼? –