#1411-неверное значение datetime для функции str на дату вставки в ... SELECT

эти запросы требуют преобразования строки в дату, поскольку метка времени хранится как строка, а приложение ведения журнала является неизменяемым.

у меня есть запрос select, который отлично работает ->

(SELECT main.user_id, main.Timestamp
FROM `user_table` main
WHERE STR_To_DATE( main.Timestamp , '%a %b %d %H:%i:%s CST %Y' ) <
  (SELECT  MAX(STR_To_DATE( sub.Timestamp , '%a %b %d %H:%i:%s CST %Y' )) 
   FROM `user_table` sub
   WHERE sub.user_id = main.user_id ))

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

однако, когда я пытаюсь вставить в другую таблицу...вот так ->

INSERT INTO user_table_temp (`user_id`, `Timestamp`)
(SELECT main.user_id, main.Timestamp
FROM `user_table` main
WHERE STR_To_DATE( main.Timestamp , '%a %b %d %H:%i:%s CST %Y' ) <
  (SELECT  MAX(STR_To_DATE( sub.Timestamp , '%a %b %d %H:%i:%s CST %Y' )) 
   FROM `user_table` sub
   WHERE sub.user_id = main.user_id ))

Я получаю следующую ошибку ->

#1411 - Incorrect datetime value: 'Mon Mar 14 16:10:10 CDT 2011' for function str_to_date

в причина этого в том, что мои метки времени хранятся в двух форматах. Один будет хранить как 'КНТ' в летнее время, другой магазин 'ЦДТ' в светлое время суток-экономия времени. Когда вставка в SELECT попадает в первую строку, которая имеет противоположность тому, что я запрашиваю, она завершится ошибкой с вышеуказанным сообщением.

Я также попытался объединить их, что также работает при запуске select ->

INSERT INTO user_table_temp  (`user_id `, `Timestamp`)
(SELECT main.user_id , main.Timestamp
FROM `user_table` main
WHERE COALESCE(STR_To_DATE( main.Timestamp , '%a %b %d %H:%i:%s CDT %Y' ), STR_To_DATE( main.Timestamp , '%a %b %d %H:%i:%s CST %Y' )) <
  (SELECT  MAX(COALESCE(STR_To_DATE( sub.Timestamp , '%a %b %d %H:%i:%s CDT %Y' ), STR_To_DATE( sub.Timestamp , '%a %b %d %H:%i:%s CST %Y' ))) 
   FROM `user_table` sub
   WHERE sub.user_id = main.user_id ))

Почему это не сработает на вставке, но Выберите сработает?

1 ответов


Я думаю, что он терпит неудачу при вставке, потому что вы не используете поддерживаемый формат. Поддерживаемые форматы . . .

в виде строки в 'гггг-ММ-ДД чч: мм: СС' или 'гггг-ММ-ДД чч: мм: СС' формат. Здесь также разрешен" расслабленный " синтаксис: любая пунктуация символ может использоваться в качестве разделителя между частями даты или времени части. Например, '2012-12-31 11:30:45', '2012^12^31 11+30+45', "2012/12/31 11*30*45', и '2012@12@31 11^30^45' are аналог.

как строка без разделителей в "YYYYMMDDHHMMSS" или Формат 'YYMMDDHHMMSS', при условии, что строка имеет смысл как дата. Например, '20070523091528' и' 070523091528 ' интерпретируются как '2007-05-23 09:15:28', но '071122129015' незаконна (он имеет бессмысленные минуты часть) и становится '0000-00-00 00:00:00'.

Как число в формате ГГГГММДДЧЧММСС или YYMMDDHHMMSS, при условии что число имеет смысл как дата. Например, 19830905132800 и 830905132800 интерпретируются как "1983-09-05 13:28:00".