【问题标题】:Can't get DATE format in Oracle无法在 Oracle 中获取 DATE 格式
【发布时间】:2018-07-07 09:21:49
【问题描述】:

我可以使用文本字段“1000306”访问数据库 - 它是报告日期。我创建了表:

create table TT
(
DT VARCHAR2(20)
);

我通过 sql loader 加载数据。

我如何从中获取日期?我应该在 Oracle 中将 varchar2 转换为 DATE 吗?或者我应该在加载数据之前这样做吗?

我试过了:

create table TT
(
DT DATE
);

但它没有加载任何数据。

【问题讨论】:

  • “它没有加载任何数据。” 那么Loader在日志文件中写了什么信息呢?看看那肯定是一个有用的练习?
  • 它显示:达到提交点 - 逻辑记录计数 65 然后我的表中没有任何内容。但是当我以同样的方式加载它,但选择 datatype: varchar2 它加载没有任何问题。
  • '1000306' 是什么日期??? 2006 年 3 月 10 日? 2010 年 3 月 6 日? 1906 年 10 月三日?存储没有世纪或其他格式的日期只会导致数据损坏。
  • 我能认为给出合理日期的唯一公式是它是否代表自 1900 年 1 月 1 日以来的小时数,因此 1000306 表示 2014 年 2 月 11 日 10:00。我接近了吗?

标签: oracle sqldatatypes sql-loader


【解决方案1】:

在 Oracle 中,该列应具有 DATE 数据类型。

控制文件(由 SQL*Loader 使用)然后应使用 TO_DATE 函数将输入值转换为有效的日期格式,例如

load data
infile ...
fields ...
( ...
  dt "to_date(:dt, 'yyyymmdd')",    --> this
)

我不知道你提到的日期值 (1000306) 代表什么(但我相信你知道)所以 - 只需修改日期格式,希望你能设法加载数据。

当您将其加载到 VARCHAR2 列时成功 - 难怪它接受任何字符串(1000306 是),但您应该将日期值存储到 VARCHAR2 列中,永远。

【讨论】:

    猜你喜欢
    • 2017-10-16
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多