Как изменить строковую дату на формат даты MySQL во время импорта ДАННЫХ ЗАГРУЗКИ MySQL использования CSV ЛОКАЛЬНЫЙ INFILE

Я использую ДАННЫЕ ЗАГРУЗКИ MySQL ЛОКАЛЬНЫЙ SQL-оператор INFILE для загрузки данных из файла CSV в существующую таблицу базы данных.

Вот SQL-оператор в качестве примера:

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(name, address, dateOfBirth)

Третий столбец в CSV, который отображается на dateOfBirth поле в настоящее время, имеет дату в следующем формате:

14-Feb-10

Как я могу изменить вышеупомянутый SQL-оператор для форматирования даты в формат даты MySQL т.е. 2010-02-14?

Я знаю, как преобразовать строковую дату при использовании нормального использования синтаксиса ВСТАВКИ:

STR_TO_DATE('14-Feb-10', '%d-%b-%y')

17
задан Alison R. 24 January 2012 в 16:51
поделиться

1 ответ

Можно использовать StrUtils.RepleyText.

Реализация

Использует StrUtils;

{$ R * .dfm}

procedure TGeneric.Button1Click(Sender: TObject);
Var
  S: String;
begin
  S := '''A'',''B'',''C'',''D''';
  S := ReplaceText(S, '''', '');
  ShowMessage(S);
end;

S теперь равно 'A, B, C, D'.

RepleyText вызовет AnsiReplireText, который в свою очередь вызывает SysUtils.StringReplace с установленными для вас флагами замены [rfRepleyAll, rfIgign Case].

-121--3442069-

Вертолеты и самолеты летают, но делают это по-разному - они оба являются экземплярами какого-то гипотетического объекта Flyer. Вы можете попросить объект Flyer «летать» - но Flyer - это просто интерфейс. Он ничего не знает о полете, кроме того, что он должен быть в состоянии летать.

Однако, если и вертолет, и самолет следуют интерфейсу летного аппарата, чем если бы у вас был аэродромный объект, и вы дали ему летательный аппарат, все, что нужно сделать аэродрому, - это запросить летные аппараты.

Например,

Airplace X=Airplane X("boeing 747");
Airfield::takeoff(&X);

Helicopter Y= Helicopter("Comache");
Airfield::takeof(&Y);

void Airfield::takeOff(Flyer * f)
{
     f->fly();
}

C++ - это строгий язык безопасности типа, и этот вид функциональности (выполнение вызовов функций к производным классам косвенно через базовый класс) возможен только тогда, когда RTTI включен для иерархии объектов, и определение виртуальной функции члена позволяет это.

-121--2894354-

Необходимо использовать предложение SET вместе с переменной для ссылки на содержимое строки в этом столбце. В списке столбцов столбец даты присваивается имени переменной. Затем ее можно использовать в инструкции SET . (Обратите внимание, я не получил MySQL передо мной, чтобы проверить это.)

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(name, address, @var1)
set dateOfBirth = STR_TO_DATE(@var1, '%d-%b-%y')

См. примеры пути ниже страницы по адресу: http://mysql2.mirrors-r-us.net/doc/refman/5.1/en/load-data.html (Не уверен, почему эта страница, похоже, отличается от основной документации тем, что на самом деле содержит пример использования SET .)

25
ответ дан 30 November 2019 в 12:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: