oracle to_date 函数不接受格式

Posted

技术标签:

【中文标题】oracle to_date 函数不接受格式【英文标题】:oracle to_date function not accepting format 【发布时间】: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' 是一个有效的格式对吗?

【问题讨论】:

【参考方案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

【讨论】:

以上是关于oracle to_date 函数不接受格式的主要内容,如果未能解决你的问题,请参考以下文章

to_date 函数 AM PM 格式

为啥 ORACLE TO_DATE() 函数可以接收任何日期格式? [复制]

Oracle中的TO_DATE和TO_CHAR函数以及日期处理

oracle中to_date详细用法示例(oracle日期格式转换)

Oracle TO_DATE() 函数格式化时间全

Oracle中的日期处理函数TO_DATE 和 TO_CHAR