Подтвердить что ты не робот

Как изменить дату строки на формат даты MySQL во время импорта CSV с использованием MySQL LOAD DATA LOCAL INFILE

Я использую инструкцию MySQL LOAD DATA LOCAL INFILE SQL для загрузки данных из файла 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?

Я знаю, как преобразовать дату строки при использовании обычного синтаксиса INSERT, используя:

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

4b9b3361

Ответ 1

Вам нужно использовать предложение 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.)

Ответ 2

Несколько более длительный процесс, который дает вам немного гибкости тестирования:

  • Используйте столбец VARCHAR (64), например, вызываемый. mydate_text, чтобы сохранить неформатированную дату, которую вы импортируете.
  • Загрузите/импортируйте таблицу, помещая дату в это текстовое поле.
  • Запустите запрос, например

    UPDATE mytable SET mydate = STR_TO_DATE (mydate_text, '% Y-% b-% d')

  • Если все выглядит нормально, оставьте столбец mydate_text

  • Если это не так, попробуйте еще раз с новым форматом.

Преимущество этого метода заключается в том, что он позволяет вам играть с форматами без необходимости повторного импорта таблицы с использованием довольно суетливого синтаксиса MySQL LOAD DATA, особенно с колонками столбцов длины. Если вы точно знаете, что вы делаете, то ответ выше. Если вы не являетесь экспертом в MySQL, этот метод может быть полезен, пока вы не получите правильные форматы.