当我在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'
是一种有效的格式吗?
答案 0 :(得分:7)
你让事情变得混乱了。 TO_DATE将字符串转换为DATE。如果date_column_timestamp
已经是日期,则无需将其转换为日期。
select trunc(SOMEINPUTdATE) from table1
where trunc(date_column_timestamp)
>= to_date('03/11/2011' ,'MM/DD/YYYY')
ORA-01843
是由日期隐式转换为字符串引起的。换句话说,以下内容:
to_date(trunc(date_column_timestamp),'MM/DD/YYYY')
等同于(假设默认日期格式为DD-MON-YYYY
):
to_date(TO_CHAR(trunc(date_column_timestamp),'DD-MON-YYYY'),'MM/DD/YYYY')
因此,TO_CHAR
会返回类似'11-MAR-2011'
的内容,然后导致to_date
失败,因为日期格式不匹配。
select
子句中存在同样的问题。您不需要to_date
日期列的trunc
。