Конвертация даты в MySQL - PullRequest
       1

Конвертация даты в MySQL

0 голосов
/ 03 марта 2019

Я импортировал файл CSV в MySQL.Файл CSV содержит дату / время в формате 'mm/dd/yyyy hh:mm'.

Импортируется в MySQL только в виде текста.Поэтому я импортировал его как текст.Затем я создал другое поле, надеясь преобразовать это текстовое значение в дату и время в этом формате 'mm-dd-yyyy hh:mm' ИЛИ в этом формате 'YYYY-mm-dd hh:mm'.Но это не работает.Ниже приведен мой код.

ALTER TABLE table1 ADD COLUMN StartDateNEW DATETIME;
SET SQL_SAFE_UPDATES = 0;
UPDATE table1 SET StartDateNEW = STR_TO_DATE(StartDate, '%m/%e/Y %H:%i');
SET SQL_SAFE_UPDATES = 1;

Образцы данных:

enter image description here

Еще несколько примеров данных:

enter image description here

Я пробовал это больше часа.Может кто-нибудь помочь, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 03 марта 2019

Если вы загружаете данные, используя синтаксис LOAD DATA INFILE , у вас должна быть возможность обрабатывать конвертацию на лету.

Предполагая, что ваш исходный CSV-файл выглядит следующим образом:

StartDate, EndDate, Value
"1/10/2012 10:05", "1/11/2012 11:51", abc
"1/13/2012 08:00", "1/15/2012 09:01", abc

Вы можете определить столбцы StartDate и EndDate как datetime тип данных и просто сделать:

LOAD DATA INFILE '/path/to/my/file.csv' INTO TABLE mytable
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
    LINES TERMINATED BY '\r\n' -- or '\n'
    IGNORE 1 LINES
    (@StartDate, @EndDate, Value)
    SET 
        StartDate = STR_TO_DATE(@StartDate, '%c/%e/%Y %k:%i'),
        EndDate =   STR_TO_DATE(@EndDate,   '%c/%e/%Y %k:%i')
;

NB: и если вы в данный момент не используете LOAD DATA INFILE ..Я бы по-прежнему рекомендовал перенести ваш код для его использования.Это правильный способ сделать это в MySQL, он работает на всех клиентах .... и это очень быстро (см. эту ссылку ).

0 голосов
/ 03 марта 2019

Быстрый взлом выглядит следующим образом:

  1. Открыть файл CSV в Excel
  2. Выберите столбец даты
  3. Измените формат даты на yyyy-mm-dd, используя формат ячейкиpopup
  4. Сохранить файл
  5. Импорт в MySQL

Это не нужно было импортировать в текстовой форме, а затем попытаться преобразовать данные в DateTime.

0 голосов
/ 03 марта 2019

Исходя из ваших данных выборки, правильная строка формата для STR_TO_DATE:

%c/%e/%Y %k:%i
  • %c допускает однозначные номера месяцев
  • %e допускаетоднозначные числа дня
  • %Y четырехзначный год
  • %k допускает однозначные часы
  • %i двузначные минуты

Все строки формата описаны в руководстве для DATE_FORMAT.

Демонстрация на dbfiddle

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