【问题标题】:is that possible to load data of various format in date column | Oracle是否可以在日期列中加载各种格式的数据?甲骨文
【发布时间】:2020-05-28 21:18:27
【问题描述】:

表:

SQL> DESC EMO_SRC;
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 EMPLOYEE_NAME                                                  VARCHAR2(30)
 EMPLOYEE_NUMBER                                                NUMBER
 STATE                                                          VARCHAR2(10)
 ZIP                                                            NUMBER
 DOB                                                            DATE
 AGE                                                            NUMBER
 SEX                                                            VARCHAR2(7)
 MARITALDESC                                                    VARCHAR2(15)
 CITIZENDESC                                                    VARCHAR2(15)
 HISPANIC_LATINO_RACEDESC                                       VARCHAR2(15)
 DATE_OF_HIRE                                                   DATE
 DATE_OF_TERMINATION                                            DATE
 REASON_FOR_TERM                                                VARCHAR2(50)
 EMPLOYMENT_STATUS                                              VARCHAR2(15)
 DEPARTMENT                                                     VARCHAR2(30)
 POSITION                                                       VARCHAR2(20)
 PAY_RATE                                                       NUMBER(6,2)
 MANAGER_NAME                                                   VARCHAR2(20)
 EMPLOYEE_SOURCE                                                VARCHAR2(30)
 PERFORMANCE_SCORE                                              VARCHAR2(40)

表 EMO_SRC 有 3 个“日期”列 DOB、Date_of_hire 和 date_of_Termination

如果

==========================================================
 DOB             | Date_of_hire      | date_of_termination
============================================================
 11/24/1987         10/27/2008            10/28/2016
 4-26-1984          1-06-2014
 02-26-1984         09/29/2014            4-15-2017

与上面一样,这 3 列的数据具有随机日期格式。 Oracle 不允许加载“01-06-2014”格式。 请让我知道有什么方法可以加载不同格式的日期值,或者我需要将数据转换为 '00/00/0000' 格式。大量数据不匹配是负载。那么如何更改和加载表中的数据。

SQL> show parameters nls_date_format;

NAME                                 TYPE       VALUE
------------------------------------ ---------- ------------------------------
nls_date_format                      string     DD-MON-RR

请告诉我解决方案。

【问题讨论】:

  • 您使用哪个应用程序?格式化由您的客户完成,而不是由NLS_DATE_FORMAT 驱动

标签: oracle date format


【解决方案1】:

您没有提及您使用的工具。

不管怎样,你有问题。 “日期”格式在列内和行内是不同的,这使得情况更糟。

我建议您创建一个接受输入值的函数 - 您在源数据中找到的“日期”(实际上是 字符串)并尝试使用 @987654321 将其转换为有效的 DATE @ 具有不同格式掩码的函数:mm/dd/yyyydd-mm-yyyy 等,无论您在源代码中找到哪个。使用内部 BEGIN-EXCEPTION-END 块,以便第一次失败不会终止函数的执行。如果您设法找到正确的日期值,很好 - 加载它。如果没有,请记录错误并尝试通过另一个TO_DATE 的格式掩码来修复它。或者,您可以使用REGEXP_LIKE 来验证输入格式。

您无法解决的问题是一个类似于10-08-20 的字符串。哪个是哪个? 10 是日、月还是年?其他值也是如此。

此外,为所有这些值调用函数(如果源很大)肯定会花费很多时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 2011-01-03
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多