【问题标题】:oracle to_date function not accepting formatoracle to_date 函数不接受格式
【发布时间】:2011-03-09 02:11:28
【问题描述】:
当我在 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' 是一个有效的格式对吗?
【问题讨论】:
标签:
sql
oracle
oracle10g
ora-01843
【解决方案1】:
你把事情搞混了。 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 子句中也存在同样的问题。您不需要在日期列的 trunc 周围使用 to_date。