这些查询要求的字符串到日期的转换,因为时间戳存储为一个字符串,记录应用程序是不可改变的。
我有一个完美的作品选择查询 - >
(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 ))
这将选择从我的表中的所有但最近添加的用户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
这样做的原因是因为我的时间戳都存储在两种格式。 一个将在非夏令时为“CST”存储,其他将在夏令时为“CDT”存储。 当INSERT INTO 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 ))
为什么会这样失败上的INSERT,但SELECT会的工作?