#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. Ах, в этом гораздо больше смысла. Приятно знать, что самый дорогостоящий процесс больше не нужен!