【问题标题】:Oracle SQL loader -to load inconsistent date formats in same columnOracle SQL 加载器 - 在同一列中加载不一致的日期格式
【发布时间】:2020-05-25 18:57:50
【问题描述】:

我的客户提供了两个不同年份的提要文件以加载到我们的数据库中。问题是 cloumn(TIME_STAMP) 接收两种不同格式的数据。

对于 2019 年:TIME_STAMP 以MM/DD/YYYY HH24:MI:SS 格式接收

对于 2020 年:TIME_STAMP 列的接收格式为 YYYY/MM/DD HH24:MI:SS

我已经在.ctl文件中写了一个代码

"to_date(:TIME_STAMP, case when regexp_substr(:TIME_STAMP,'\w+',1,2)=regexp_substr(:TIME_STAMP,'\w+',1,2) then 'YYYY/MM/DD HH24:MI:SS' else
'MM/DD/YYYY HH24:MI:SS' end)",

问题是我正在加载我的 2019 年文件,但我的 2020 年给了

“ORA-01843: 月份无效”

【问题讨论】:

  • 您真的需要适用于 3 个不同 Oracle 版本(其中两个不受支持)的解决方案吗?
  • 你使用的是sqlldr还是SQL Developer?
  • 没有足够的 oracle 11g,12c
  • 我正在使用 Toad
  • 两个文件写两个脚本不是更容易吗?如果将来必须导入文件,那么您应该与客户讨论数据将以什么格式发送。如果客户以另一种格式发送日期,您将始终遇到问题。客户通常很有创意:)

标签: sql oracle date oracle11g oracle12c


【解决方案1】:

考虑:

to_date(
    :TIME_STAMP, 
    case 
        when substr(:TIME_STAMP, 1, 4) = '2020' then 'YYYY/MM/DD HH24:MI:SS' 
        else 'MM/DD/YYYY HH24:MI:SS' 
    end
)

逻辑是tom简单地检查字符串的前4个字符;如果是'2020',那么我们使用第一个sring格式,否则我们使用另一个。

【讨论】:

    猜你喜欢
    • 2014-02-20
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 2017-07-01
    相关资源
    最近更新 更多