道歉,我很新的的Oracle SQL所以有可能是一些令人眼花繚亂的不對的!日期建設Oracle服務器「Oracle數據庫錯誤1839年」
當我運行下面的語句作爲查詢的一部分,給出了以下錯誤: 「Oracle數據庫錯誤1839年:ORA-01839:日期不適用於指定月」
我覺得這事做與閏年,因爲當我過濾我的時間序列的最新數據(3月 - 當前日期)則沒有錯誤提前給出了
感謝
(TO_CHAR(extract(year from TO_DATE('01/01/2000','DD/MM/YYYY')), '9999')
-
(
TO_CHAR(extract(year from "DELIVERY_DATE"), '9999')
- TO_CHAR(extract(year from "TRADING_DATE"), '9999')
)
)
|| TO_CHAR(extract(month from "TRADING_DATE"), 'FM00')
|| TO_CHAR(extract(day from "TRADING_DATE"), '99')
,'YYYYMMDD')
特殊照顧是正確的。年份可能是1999年或1998年,具體取決於交割日期和交易日期之間的差異。所以如果月份部分是二十九,日部分是二十九;你會得到一個錯誤。您需要首先檢查年份是閏年,然後再執行其餘的SQL。以下是檢查閏年的功能:http://www.dba-oracle.com/t_detect_leap_year_function.htm – anonyXmous
此代碼有幾個錯誤。例如,您可以調用輸出字符串的'TO_CHAR'。然後你從另一箇中減去一個字符串。甲骨文是寬容的 - 它會將字符串轉換回數字 - 並且運氣好的話,甲骨文將會正確地做到這一點(然而,有時它確實會錯誤)。如果你能解釋你最初想解決什麼問題,而不是修復你的代碼,那麼你可能會得到更好的幫助;我只是猜測一個更簡單的解決方案可能存在。 – mathguy
@mathguy,是的,我們可以改進sql,因爲它所做的是複製交易日期的月份和日期,然後從2000年減去交貨日期和交易日期之間的年份差異。希望它是明確的。 – anonyXmous