【问题标题】: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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多