2011-11-30 101 views
2

可能有人請解釋爲什麼這代碼的Oracle SQL轉換功能

to_date('25-JAN', 'DD-MON') 

作品,這不

to_date(to_char(date_of_birth, 'DD-MON'), 'DD-MON')

運行

to_char(date_of_birth, 'DD-MON')

這是內功能在它自己的瓦特獸人,但後來引發

"ORA-01839 error: date not valid for month specified". 

感謝

回答

0

你有一個無效的一天,特定月份在你的餐桌, 例如:

SQL> select date '1996-01-29' + interval '1' month as col_1 
    2 ,  date '1997-01-29' + interval '1' month as col_2 
    3 ,  date '1997-08-11' - interval '3' month as col_3 
    4 from dual; 
,  date '1997-01-29' + interval '1' month as col_2 
         * 
ERROR at line 2: 
ORA-01839: date not valid for month specified 


    SQL> 
    SQL> select date '1996-01-29' + interval '1' month as col_1 
     2 ,  date '1997-01-28' + interval '1' month as col_2 
     3 ,  date '1997-08-11' - interval '3' month as col_3 
     4 from dual; 
    Enter... 

    29-02-1996 28-02-1997 11-05-1997 

    1 row selected. 

看看你的表內的無效天一個月。

+0

感謝Nammari,我是能夠在我嘗試從中提取數據的列中找到'29 -FEB'。從現在開始我會留意這種情況。 –

6

您的代碼可以正常工作,1月25日作爲日期。問題是日期需要一年。所以當你這樣做時:

TO_DATE('25-JAN', 'DD-MON') 

...... Oracle需要建立一個完整的日期並假設當前年份。證明:

SELECT TO_CHAR(TO_DATE('25-JAN', 'DD-MON')) 
FROM DUAL 

...打印:

25/01/2011 00:00:00 

當然,還有一個月,不總是有相同的天數是:二月

SELECT TO_CHAR(TO_DATE('29-FEB-2000', 'DD-MON-YYYY')) 
FROM DUAL 
-- 29/02/2000 00:00:00 

SELECT TO_CHAR(TO_DATE('29-FEB', 'DD-MON')) 
FROM DUAL 
-- ORA-01839: date not valid for month specified 
+0

非常感謝,我做了一個搜索(在OE模式中的客戶表date_of_birth列),並發現'29 -FEB',這意味着錯誤是2011年的結果不是一個閏年,愚蠢的我。我很高興,現在我知道在處理日期數據類型列時應該注意些什麼。再次感謝。 –

+0

@AndrewMudamai歡迎您。隨時將問題標記爲已回答,以便將來可以幫助其他人。 –