Преобразование текстовой метки времени в дату и время для всех строк в MySQL - PullRequest
0 голосов
/ 29 августа 2018

Я импортировал данные и схему из файла XML в MySQL. У меня есть несколько столбцов в нескольких таблицах:

DateStart     tinytext
DateEnd       tinytext

Формат этого выглядит как отметка времени, т.е. 2006-06-01T00:00:00-05:00 Некоторые из этих значений также null. Мне нужен способ конвертировать эту tinytext метку времени в обычный MySQL datetime, но я не уверен, как.

Я попытался создать новый столбец my_date_time, который имел тип datetime, и попытался преобразовать каждое значение следующим образом:

UPDATE table SET my_date_time = str_to_date(DateStart, '%Y-%m-%d');

Однако это дает мне следующую ошибку:

Data truncation: Incorrect date value: '2006-09-01T00:00:00-05:00' for column 'DateStart' at row 1

Как мне преобразовать все значения во всех строках этих столбцов?

1 Ответ

0 голосов
/ 30 августа 2018

Вы можете создать новое поле:

SELECT
  DateStart,
  DateEnd,
  CAST(DateStart AS DATETIME) AS my_date_time
FROM [your_table]

Или вы можете добавить новый столбец в таблицу, используя:

UPDATE [your_table] SET my_date_time = CAST(DateStart AS DATETIME);

Вы можете разыграть DATE вместо DATETIME, если вам нужна только дата.

Это не позаботится о часовом поясе.

Если у вас есть значения в разных часовых поясах, вы можете использовать:

UPDATE [your_table] SET my_date_time = DATE_ADD(CAST('2006-09-01T00:00:00-05:00' AS DATETIME), INTERVAL CAST(substr('2006-09-01T00:00:00-05:00',20,3) AS SIGNED) HOUR);

Это будет работать, только если все изменения часовых поясов будут полными часами (а не полчаса).

Надеюсь, это поможет

...