【问题标题】:If-else case in SQL*LoaderSQL*Loader 中的 if-else 情况
【发布时间】:2017-10-27 06:41:51
【问题描述】:

每当 SQL*Loader 在读取 .csv 文件时遇到错误日期 (0000-00-00 00:00:00) 时,我需要将 NULL 插入表中。

csv 中提供的错误日期始终为 0000-00-00 00:00:00

我需要帮助找出处理错误日期和正确日期的案例。

有两种情况:

  1. 日期格式正确 (YYYY/MM/DD hh24:mi:ss)
  2. 日期格式错误 (0000-00-00 00:00:00)

最初我在 SQL 控制文件中有一个简单的语句,如下所示,现在我需要添加 case 来处理错误日期。

START_DATE DATE "YYYY/MM/DD hh24:mi:ss" NULLIF (START_DATE = "NULL").

我需要一个处理上述两种情况的 SQL*Loader 语句。

【问题讨论】:

  • 真正的问题是什么
  • 每当 SQLDR 面临错误日期时,我都需要将 Null 插入列中:0000-00-00 00:00:00...。 Start_date... 列中有两种情况...这是正确的日期格式和一个 0000-00-00 00:00:00

标签: oracle csv sql-loader


【解决方案1】:

文件中的所有数据本质上都是一个字符串,直到被验证为不同的数据类型。因此,您可以在将其转换为日期之前将其视为错误数据的字符串:

START_DATE "TO_DATE(NULLIF(:START_DATE, '0000-00-00 00:00:00'), 'yyyy/mm/dd hh24:mi:ss')"

我有点担心“坏”日期的格式与好日期的格式不同。它表示您可能不知道正在发生的事情,例如来自两个不同系统的数据或该字段未作为日期存储在源系统中。

如果可能,我会仔细检查这些数据是如何构建的,以及错误日期的预期含义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多