【问题标题】:MySQL data field to oracleMySQL数据字段到oracle
【发布时间】:2014-11-05 22:16:34
【问题描述】:

我正在使用 sqlldr 在 Oracle 数据库中加载 mysql 数据...我的问题是我在 MySQL 中有一个 Oracle 不喜欢的 DATE 列...

这是我在mysql中的列的结构:

Extra   Type    Field   Default Null    Key
        date    dateToSend      0000-00-00      NO  

这是我的 ctl 文件中的条目:

DATETOSEND "CASE :DATETOSEND WHEN '0000-00-00 00:00:00' THEN TO_DATE('1900-01-01', 'YYYY-MM-DD') ELSE TO_DATE(:DATETOSEND, 'YYYY-MM-DD HH24:MI:SS') END"

我用于“DATETOSEND”的 oracle 列是 DATE

mysql 中日期字段的示例是:“2014-08-14

最后,我从 sqlldr 得到的错误是:

ORA-01861: 文字与格式字符串不匹配

我知道这可能与我格式化“TO_DATE”的方式有关,但我不确定我错过了什么......

更新:这让它工作了:

DATETOSEND "to_date(SUBSTR(:DATETOSEND,1,10),'YYYY-MM-DD')" 

【问题讨论】:

  • 0000-00-00 00:00:00 是无效日期,永远无法导入 Oracle
  • 是的,明白了。我试过这个:DATETOSEND "to_date(SUBSTR(:DATETOSEND,1,10),'YYYY-MM-DD')" 并且有效。

标签: mysql oracle date datetime


【解决方案1】:

我怀疑问题是:

 CASE :DATETOSEND WHEN '0000-00-00 00:00:00'

该常量是 Oracle 中的无效日期。也许这会起作用:

 CASE TO_CHAR(:DATETOSEND, 'YYYY-MM-DD HH24:MI:SS') WHEN '0000-00-00 00:00:00'

【讨论】:

  • 我将我的 sqlldr 语句修改为: DATETOSEND "CASE TO_CHAR(:DATETOSEND, 'YYYY-MM-DD HH24:MI:SS') WHEN '0000-00-00 00:00:00' THEN TO_DATE('1900-01-01', 'YYYY-MM-DD') ELSE TO_DATE(:DATETOSEND, 'YYYY-MM-DD HH24:MI:SS') END" 并得到一个新错误:"Invalid Number"
【解决方案2】:

这让它工作了:

DATETOSEND "to_date(SUBSTR(:DATETOSEND,1,10),'YYYY-MM-DD')" 

【讨论】:

    猜你喜欢
    • 2012-10-05
    • 2015-02-09
    • 2015-01-24
    • 2012-11-28
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 2021-04-03
    相关资源
    最近更新 更多