У меня довольно большой (более 200 000 записей) файл, который я вставляю в таблицу с 59 столбцами. Данные содержат несколько полей DATETIME. Даты ввода находятся в форме «10/06/2019 10:45:58». Как я могу ввести эти поля как DATETIME (или, может быть, просто DATE, так как поле TIME не имеет значения для моих целей)?
Если я задаю для различных полей даты тип DATETIME, поля отображаются как 0000-00-00 00:00:00 после загрузки. Это потому, что база данных не знает, что делать с форматом ввода.
Я вижу два разных подхода, но у каждого есть проблемы:
Предварительная обработка :
Я создаю сценарий для обнаружения полей даты с помощью Regex и переформатирую их вожидаемая форма, использующая что-то вроде Perl's DateTime :: Format :: DBI. Здесь есть риск, поскольку записи включают в себя поля TEXT произвольной формы, которые могут содержать запятые и кавычки. Положительная идентификация полей DATE затруднена только из-за масштаба.
Постобработка :
Создайте таблицу с полями даты как VARCHAR и используйте функцию SQL STR_TO_DATE, чтобы заполнить столбцы даты.
INSERT INTO mytable(DATELastDetected, DATEFirstDetected)
SELECT STR_TO_DATE(LastDetected, '%c/%e/%Y %H:%i'),
STR_TO_DATE(FirstDetected, '%c/%e/%Y %H:%i')
from mytable;
Третий вариант?
Мне было интересно, могу ли я указать ожидаемый формат входных данных для этих столбцов DATE в операторе CREATE TABLE, который будет отображатьвесь разговор спорный. Я видел другой вопрос , в котором упоминается использование DATEFORMAT в операторе CREATE TABLE, но я не нашел правильный синтаксис для использования.
Цени любые мысли.