Переформатировать дату в загрузчике SQL

#oracle #date #sql-loader

Вопрос:

Я загружаю таблицы Oracle с помощью загрузчика SQL, и у меня проблема с форматами дат. Файлы CSV с данными содержат строки в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС, но для таблиц Oracle требуется формат даты ДД-ПН-ГГ.

В настоящее время я строчно просматриваю CSV-файлы, чтобы найти и переформатировать любые даты перед загрузкой, но файлы могут достигать более 10 строк, и это может быть довольно медленным процессом. Позволяет ли загрузчик SQL переформатировать дату при загрузке?

Я ищу что-то вроде

 LOAD DATA
INFILE 'data.csv'
TRUNCATE
INTO TABLE data
FIELDS TERMINATED BY '|'
TRAILING NULLCOLS
(
COL1,
COL2,
CREATED_DATE DATE 'DD-MON-YY',
LAST_UPDT_DATE DATE 'DD-MON-YY
)
 

Я читал предложения о том, что эта команда ДАТЫ может автоматически форматировать даты, но до сих пор ей не везло.

Комментарии:

1. Являются created_date ли и last_updt_date объявлены в базе date данных типами данных? Если это так, то у них нет формата. В вашем контрольном файле должен быть указан формат строк даты в файле данных.

Ответ №1:

Предполагая created_date , что и last_updt_date на самом деле определены как date в базе данных, у них нет формата. Они хранятся во внутреннем упакованном двоичном формате, который не читается человеком.

В вашем контрольном файле необходимо указать формат строк в плоском файле, которые представляют дату. Вы говорите, что формат «ГГГГ-ММ-ДД ЧЧ:ММ:СС», но это не имеет смысла. Минуты-это МИ, а не ММ, поэтому я предполагаю, что это тип. HH-это 12-часовой формат времени, но это не имеет смысла без индикатора AM/PM. Поэтому я предполагаю, что ваши строки используют 24-часовой формат времени, который является HH24. Так что я предполагаю, что вы хотите

 CREATED_DATE DATE 'YYYY-MM-DD HH24:MI:SS',
 

Комментарии:

1. Ах, в этом гораздо больше смысла. Приятно знать, что самый дорогостоящий процесс больше не нужен!