2017-04-09 95 views
-1

我有一個需要轉換爲字符的日期列。但是這樣做它會檢索'00 -000-00',即使實際數據具有日期值。另外,當我再次將其轉換爲日期時,它會顯示第二天的值。在Oracle數據庫中,TO_CHAR(日期)給出結果'00 -000-00'

例如:

Value: 25-MAR-17 (Date Datatype) 
TO_CHAR(Value, 'DD-MON-YY'): '00-000-00' 
TO_DATE(Value, 'DD-MON-YY'): '26-MAR-17' 

而且這不會發生的所有的值,但只有最近的值。

這是目前在該日期列中的值轉儲:

select OrderNumber, LoanDate, Dump(LoanDate) from OrderDetail 
where OrderNumber=283402 
OrderNumber| LoanDate | Dump(LoanDate) 
283402  | 26-MAR-17 | Typ=12 Len=7: 120,117,3,27,0,15,40 

能否請您給我解釋一下爲什麼這些奇怪的事情發生,如何處理?

+3

這是相當困難對於我們理解你的問題,因爲沒有辦法,應與你給出的數據發生。請提供可複製的測試用例。也就是說,帶有示例數據的虛擬表以及您正在運行的查詢會顯示此行爲。減少細節到必需品。您可能會發現這個練習可以讓您瞭解並幫助您在沒有我們幫助的情況下解決您的問題。 – APC

+0

日期到日期轉換隻是爲了檢查它的行爲。 –

+2

請提供必要的DDL和DML語句以複製問題的[MCVE]。請同時嘗試'SELECT DUMP(your_date_column)FROM your_table'併發布其值。 – MT0

回答

0

把作爲回答,而不是評論,因爲你說什麼0是不可能會太大發表評論

。如果您已將NLS_DATE_FORMAT設置爲僅顯示時間,則可能會得到零。由於timezone轉換,您還可能獲得下一個日期。

要解決問題,請按照下列步驟操作,編輯問題並在問題中提供輸出。

  1. SELECT * FROM nls_session_parameters;

  2. 運行select sysdate from dual;並顯示輸出。

  3. 運行此alter session set nls_date_format = 'DD-MON-YYYY HH24:MI:SS';
  4. 運行select sysdate from dual並顯示輸出。
  5. 現在再次選擇日期,select <date column> from <your table> where rownum<2;
  6. 運行select to_char(date_column,'DD-MON-YYYY') from your_table where row_num<2;
+0

謝謝。將嘗試它。 –

+1

但我不認爲這是一個格式問題。 –

+0

當調用'to_char()'時,'nls_date_format'不相關。 –

相關問題