好的家伙,首先,我已经检查过很多关于此错误的网站,不幸的是,他们都没有帮助我。我有以下简单的查询:
select * from (
select to_date(cal.year || cal.month || cal.day, 'yyyymmdd') as datew,
cal.daytype as type
from vw_calendar cal)
where datew > sysdate;
当我尝试执行整个查询时,会出现此错误:
ORA-01839:日期对指定的月份无效
如果我只执行查询:
select to_date(cal.year || cal.month || cal.day, 'yyyymmdd') as datew,
cal.daytype as type
from vw_calendar cal;
它工作得非常好。如果您想查看查询结果:http://pastebin.com/PV95g3ac
我检查了当月的日子,如第31天或闰年,一切似乎都是正确的。我不知道该怎么办了。我的数据库是Oracle 10g,我试图在SQL Developer和PL / SQL Developer上执行查询。两个IDE都出现相同的错误。
答案 0 :(得分:2)
好吧,我找到了解决方法,而不是解决方案。如果有人知道"正确"解决这个问题的方法,如果您与我们分享,我将不胜感激。我的解决方案"将日期转换为数字,然后与sysdate
(也转换)进行比较。看看:
select * from
( select to_number(cal.year||cal.month||cal.day) as datew,
cal.daytype as type from vw_calendar cal ) a
where a.datew > to_number(to_char(sysdate, 'yyyymmdd'));
感谢大家!
答案 1 :(得分:2)
实际上问题是几个月有30天,有些有31个,所以你正在形成的查询,它试图获得该月的第31天无效,因此错误。例如:
它可能会尝试日期如:31-NOV-2016这是不正确的,NOV只有30天。
答案 2 :(得分:0)
为内部查询使用别名
select * from (
select to_date(cal.year || cal.month || cal.day, 'yyyymmdd') as datew,
cal.daytype as type
from vw_calendar cal) a
where a.datew > sysdate;