2016-11-23 191 views
0

我在本地開發機器上有一個數據庫,並且在我們的測試服務器上有一個數據庫。基本上,我的開發機器上的表格是從測試機器上覆制過來的。Oracle Date to_char返回不同的結果

但是,我發現to_char函數處理同一日期的方式有所不同。在我的機器,如果我運行下面的查詢:

select test_date, to_char(test_date, 'YYYY-MM-DD') 
from test.table 
where id = 'C0007784' 

我得到如下結果:

31-DEC-99 1999-12-31

上運行鍼對相同的架構和數據,我得到了同樣的查詢測試服務器以下:

31-DEC-99 1899-12-31

莫非在to_char這種行爲差異是由於兩個Oracle實例中的設置不同?

如果我運行SELECT value FROM v$nls_parameters WHERE parameter ='NLS_DATE_FORMAT';我得到兩個實例的DD-MON-RR

+4

您確定底層數據是相同的嗎? –

+3

只要它是**相同的數據**這是不可能的。 –

+0

您能否準確描述表格是如何從測試機器複製的? –

回答

2

因此您使用DD-MON-YY格式將表格的內容導出到csv文件。 YY顯然引起歧義。我想,當你導入的文件,99被解釋爲1999年而不是1899年,我不知道這是使用數據庫來猜測全年的確切機制,但無論如何,甲骨文strongly recommends YYYY in date format

注:由於以下原因,Oracle建議您使用4位年份元素(YYYY) 而不是年份較短的元素:年份的4位 消除了不明確性。

較短的年份元素可能會影響查詢優化,因爲 年在查詢編譯時未知,只能在 運行時確定。

+0

當我嘗試導出表格的內容爲SQL插入語句時,我發現'1899-12-31'被插入爲'to_date('31 -DEC-99','DD-MON-RR')',它變成'1999-12-31'在我的開發數據庫中。 *鑑於*'2012-02-23'作爲'to_date('23 -FEB-12','DD-MON-RR')'插入,並在我的開發數據庫中成爲'2012-02-23'。 –