Как изменить строковую дату на формат даты 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, этот метод может быть полезен, пока вы не получите правильные форматы.