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

Я использую SQL-оператор MySQL LOAD DATA LOCAL 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?

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

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

2 ответа

Решение

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

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

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

    ОБНОВЛЕНИЕ mytable SET mydate = STR_TO_DATE(mydate_text, '%Y-%b-%d')

  • Если все выглядит хорошо, удалите столбец mydate_text

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

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

Другие вопросы по тегам