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

Я использую оператор 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 ]

25 голосов
/ 10 февраля 2010

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

5 голосов
/ 19 сентября 2011

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...