道歉,我对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')
答案 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;