Мы можем использовать функцию STR_TO_DATE с подходящей моделью формата. Функция не имеет форматной модели для обработки аббревиатуры часового пояса как части строки datetime, поэтому нам нужно немного поработать со строкой, чтобы обойти ее
например
SELECT STR_TO_DATE( CONCAT(SUBSTRING_INDEX(t.foo,' ',4),' ',SUBSTRING_INDEX(t.foo,' ',-1)),'%a %b %d %T %Y') AS dt
, SUBSTRING_INDEX(SUBSTRING_INDEX(t.foo,' ',5),' ',-1) AS tz
FROM ( SELECT 'Fri Sep 11 15:30:55 JST 2015' AS foo
UNION ALL SELECT 'Fri Sep 11 15:40:09 JST 2015'
UNION ALL SELECT 'Fri Sep 11 14:55:09 SGT 2015'
UNION ALL SELECT 'Fri Sep 11 14:57:38 SGT 2015'
UNION ALL SELECT 'Fri Sep 11 03:59:02 EDT 2015'
UNION ALL SELECT 'Fri Sep 11 01:10:17 PDT 2015'
) t
Для обработки часового пояса мы можем использовать функцию CONVERT_TZ, но для обработки значений часового пояса необходимо заполнить mysql .time_zone_name (и соответствующие таблицы time_zone).
SELECT STR_TO_DATE( CONCAT(SUBSTRING_INDEX(t.foo,' ',4),' ',SUBSTRING_INDEX(t.foo,' ',-1)),'%a %b %d %T %Y') AS dt
, SUBSTRING_INDEX(SUBSTRING_INDEX(t.foo,' ',5),' ',-1) AS tz
, CONVERT_TZ( STR_TO_DATE( CONCAT(SUBSTRING_INDEX(t.foo,' ',4),' ',SUBSTRING_INDEX(t.foo,' ',-1)),'%a %b %d %T %Y')
, SUBSTRING_INDEX(SUBSTRING_INDEX(t.foo,' ',5),' ',-1)
, '+00:00'
) AS dt_utc
FROM ( SELECT 'Fri Sep 11 01:10:17 PDT 2015' AS foo
UNION ALL SELECT 'Fri Sep 11 01:10:17 PST8PDT 2015'
) t
возвращает
dt tz dt_utc
------------------- ------- -------------------
2015-09-11 01:10:17 PDT (NULL)
2015-09-11 01:10:17 PST8PDT 2015-09-11 08:10:17
NB Если в таблице mysql.time_zone_name
нет записей для PDT
, EDT
, SGT
или других значений tz, которые мы хотим преобразовать, функция CONVERT_TZ
вернет NULL.
FOLLOWUP
Использование этих типов выражений в предложении WHERE потребует вычисления выражения для каждой строки в таблице. При заданном диапазоне значений дат, которые мы ищем, если информация была сохранена в столбце DATETIME с соответствующим индексом, оптимизатор мог бы использовать операцию сканирования диапазона.
, что приводит нас к выводу что для производительности MEDIUMTEXT - не лучший тип данных для хранения значений DATETIME.