oracle to_date函数不接受格式
当我在 oracle 10g 中执行此操作时:
select to_date(trunc(SOMEINPUTdATE)) from table1
where to_date(trunc(date_column_timestamp),'MM/DD/YYYY')
>= to_date('03/11/2011' ,'MM/DD/YYYY')
我得到:ORA-01843: not a valid Month
如果我更改为:'YYYY/MM/DD'
,它就可以工作。 但是 'MM/DD/YYYY'
是有效的格式,对吧?
When I do this in oracle 10g:
select to_date(trunc(SOMEINPUTdATE)) from table1
where to_date(trunc(date_column_timestamp),'MM/DD/YYYY')
>= to_date('03/11/2011' ,'MM/DD/YYYY')
I get: ORA-01843: not a valid month
if I change to : 'YYYY/MM/DD'
, it works.
But 'MM/DD/YYYY'
is a valid format right?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你把事情搞混了一点。 TO_DATE 将字符串转换为 DATE。如果
date_column_timestamp
已经是日期,则无需将其转换为日期。ORA-01843
是由日期到字符串的隐式转换引起的。换句话说,以下内容:相当于(假设默认日期格式
DD-MON-YYYY
):因此,
TO_CHAR
返回类似于'11- MAR-2011'
,然后导致to_date
失败,因为日期格式不匹配。您的
select
子句中也存在同样的问题。您不需要在日期列的trunc
周围添加to_date
。You're getting things mixed up a bit. TO_DATE converts a string into a DATE. If
date_column_timestamp
is already a date, you don't need to convert it to a date.The
ORA-01843
is caused by the implicit conversion of a date to string. In other words, the following:is equivalent to (assuming the default date format
DD-MON-YYYY
):So, the
TO_CHAR
returns something like'11-MAR-2011'
, which then causesto_date
to fail because the date formats do not match.The same problem exists in your
select
clause. You don't needto_date
around atrunc
of a date column.