Oracle Server中的日期构建“Oracle数据库错误1839”

时间:2017-04-21 15:40:49

标签: sql oracle tableau

道歉,我对Oracle SQL很陌生,所以可能有一些令人眼花缭乱的错误!

当我在查询中运行以下语句时,会给出以下错误: “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') 

1 个答案:

答案 0 :(得分:0)

因为你要从2000年减去闰年的年份,我将更改你的SQL以检查DELIVERY_DATE和TRADING_DATE之间的差异是否不能被4整除;如果不能被4整除(比如1999年不是闰年和月份是2月29日那么使用1999年2月28日)。这仅适用于将参考年份修改为2000年的闰年。如果您更改参考年份,我可以给您另一个答案<>希望这会有所帮助。

 SELECT TO_DATE(
      CASE WHEN mod(extract(year from "DELIVERY_DATE") - extract(year from "TRADING_DATE"),4)!=0
            AND to_char("TRADING_DATE", 'mm/dd') = '02/29'
    then to_char(extract(year from TO_DATE('01/01/2000','DD/MM/YYYY')) - 
           extract(year from "DELIVERY_DATE") + 
           extract(year from "TRADING_DATE")) ||
           to_char("TRADING_DATE" - 1, 'mmdd')  
    else to_char(extract(year from TO_DATE('01/01/2000','DD/MM/YYYY')) - 
           extract(year from "DELIVERY_DATE") + 
           extract(year from "TRADING_DATE")) ||
           to_char("TRADING_DATE", 'mmdd') 
    END,'YYYYMMDD')  AS ANSWER 
    FROM DUAL;