2017-08-11 76 views
1

我們有以下查詢像甲骨文日期爲MON-DD給ORA-01839:日期無效月指定

SELECT TO_DATE(CREATED_DATE_IN_CHAR,'MON-DD') FROM TABLE1 

數據的列是MON-DD的格式相同。

在執行上述查詢時,我們得到了ORA-01839:date指定的月份無效。 通過進一步分析,我們發現created_date_in_char具有類似'FEB-29'的值。因此,oracle正在嘗試將2017年的「FEB-29」轉換爲「29 -FEB-17」(當前年份爲2017年),這不是有效日期。

是否可以使to_date函數日期轉換的閏年,而不是當前年份(2017年)。

我們卡在這裏。任何幫助或建議表示讚賞。

+1

嗯......也許最好的事情是控制日期輸入進入您的查詢。如果從應用層完成,例如Android或者移動應用程序,您可以使用一個呈現正確日曆的小部件。 –

+0

@TimBiegeleisen感謝您的輸入。但要求是從應用程序層(UI)獲取相同格式的日期。用戶只能在UI中選擇MON-DD。 – Hariharan

回答

0

您不能讓to_date()假設爲不同的年份,但您可以通過將它作爲字符串的一部分傳入來使用特定年份(任何一年是閏年) - 只是將固定值連接起來,並修改格式模式匹配:

SELECT TO_DATE('2016-' || CREATED_DATE_IN_CHAR,'YYYY-MON-DD') FROM TABLE1 

快速演示:

alter session set nls_date_format = 'YYYY-MM-DD'; -- for display only 

with table1 (created_date_in_char) as (
    select 'JAN-01' from dual 
    union all select 'FEB-29' from dual 
    union all select 'DEC-31' from dual 
) 
SELECT TO_DATE('2016-' || CREATED_DATE_IN_CHAR,'YYYY-MON-DD') FROM TABLE1; 

TO_DATE('2 
---------- 
2016-01-01 
2016-02-29 
2016-12-31 

這似乎很奇怪的和無益的存儲創建日期(或日期)剛剛月份和日期,或任何日期作爲一個字符串;但這不是直接的問題...