Vic*_*tor 0 sql oracle oracle10g ora-01843
当我在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')
Run Code Online (Sandbox Code Playgroud)
我明白了:ORA-01843: not a valid month如果我改为:'YYYY/MM/DD'那就行了.但是'MM/DD/YYYY'有效格式对吗?
你的事情变得混乱了.TO_DATE将字符串转换为DATE.如果date_column_timestamp已经是日期,则无需将其转换为日期.
select trunc(SOMEINPUTdATE) from table1
where trunc(date_column_timestamp)
>= to_date('03/11/2011' ,'MM/DD/YYYY')
Run Code Online (Sandbox Code Playgroud)
这ORA-01843是由日期隐式转换为字符串引起的.换句话说,以下内容:
to_date(trunc(date_column_timestamp),'MM/DD/YYYY')
Run Code Online (Sandbox Code Playgroud)
相当于(假设默认日期格式DD-MON-YYYY):
to_date(TO_CHAR(trunc(date_column_timestamp),'DD-MON-YYYY'),'MM/DD/YYYY')
Run Code Online (Sandbox Code Playgroud)
因此,TO_CHAR返回类似的东西'11-MAR-2011',然后导致to_date失败,因为日期格式不匹配.
您的select子句中存在同样的问题.你不需要to_date绕trunc一个日期列.
| 归档时间: |
|
| 查看次数: |
8733 次 |
| 最近记录: |