【问题标题】:Oracle TO_DATE headacheOracle TO_DATE 头痛
【发布时间】:2012-04-12 14:26:59
【问题描述】:

我有一个字符串列,其中包含以下数据作为示例

10/20/2005 15:08:00 
11252011 15:22:40   

我创建了一个临时日期列,我会将内容复制到其中,删除字符串列并将临时列重命名为字符串之一。

但是,在我尝试将数据复制到新的临时列时,我遇到了错误:

ERROR
ORA-01861: literal does not match format string

这里是 SQL:

update mytable set MYDATE_TEMP = to_date(mystringcol, 'yyyy/mm/dd hh24:mi:ss')

有没有办法复制数据?

【问题讨论】:

  • 您的数据与指定的日期格式不匹配。尝试查找此数据,如果它有效,您可能需要使用解码、大小写或替换函数...否则,您可能需要编写一个函数,将列作为输入并以字符串形式返回日期,或者日期本身

标签: oracle oracle10g to-date


【解决方案1】:

如果您只需要处理这两种格式,请尝试:

update mytable set MYDATE_TEMP = to_date(replace(mystringcol,'/',''),
                                         'mmddyyyy hh24:mi:ss')

【讨论】:

  • 如果你有很多格式,你可能需要一个 PL/SQL 函数来接收字符串,尝试一堆格式,然后返回一个日期。一种方法是一系列嵌套的 v_return := to_date (in_text, ; 当其他人出现异常时 v_return := 。如果您经常这样做,请为 ORA- 定义一个命名异常1861. 对于一次性数据修复,我只使用“当其他人”
  • 不喜欢,我猜应该是mmddyyyy hh24:mi:ss
【解决方案2】:

第一个你可以使用:

update mytable set MYDATE_TEMP = to_date(mystringcol, 'mm/dd/yyyy hh24:mi:ss');

第二个:

update mytable set MYDATE_TEMP = to_date(mystringcol, 'mmddyyyy hh24:mi:ss');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 2014-11-17
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多