можно ли загрузить данные различного формата в столбец даты | Oracle - PullRequest
0 голосов
/ 13 февраля 2020

Таблица:

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_SR C имеет 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

Пожалуйста, дайте мне знать решение.

1 Ответ

0 голосов
/ 13 февраля 2020

Вы не упомянули, какой инструмент используете.

В любом случае, у вас есть проблема. Форматы «даты» различаются в столбцах и в строках, что делает его еще хуже.

Я бы предложил создать функцию, которая будет принимать входные значения - «даты» (фактически, строки * 1006). *) вы находите в исходных данных и пытаетесь преобразовать их в действительную дату, используя функцию TO_DATE с различными масками формата: mm/dd/yyyy, dd-mm-yyyy и т. д. c., в зависимости от того, что вы найдете в источнике. Используйте внутренние блоки BEGIN-EXCEPTION-END, чтобы первый сбой не прекратил выполнение функции. Если вам удастся найти правильное значение даты, прекрасно - загрузите его. Если нет, зарегистрируйте ошибку и попробуйте исправить ее с помощью другой маски формата TO_DATE. При желании вы можете использовать REGEXP_LIKE для проверки формата ввода.

Проблема, которую вы не можете решить, это строка, которая выглядит как 10-08-20. Что есть что? 10 день, месяц или год? То же самое относится и к другим значениям.

Кроме того, вызов функции для всех этих значений - если источник большой - безусловно, займет много времени.

...