我有一个名为 Timestamp 的字段,它将其值存储为文本,而不是实际的 Timestamp。不幸的是,日志记录应用程序是不可更改的。
所以
table.Timestamp -> text field with format -> "Wed Mar 02 13:28:59 CDT 2011"
我一直在开发一个查询来清除除最近行之外的所有行,使用它作为我的时间戳选择器,它也将字符串转换为日期->
MAX( STR_To_DATE( table.Timestamp , '%a %b %d %H:%i:%s CDT %Y' )
我的查询完美运行...
但是,我发现字符串值 -> 'CDT' -> 在 'CDT' 和 'CST' 之间变化,具体取决于当前时间是否为夏令时。在夏令时期间,它记录为“CDT”,反之亦然。
因此,当我运行它时,所有包含“CST”的行都会被忽略 ->
MAX( STR_To_DATE( table.Timestamp , '%a %b %d %H:%i:%s CDT %Y' )
当我运行它时,所有包含“CDT”的行都会被忽略->
MAX( STR_To_DATE( table.Timestamp , '%a %b %d %H:%i:%s CST %Y' )
有没有办法让它针对两种字符串格式运行?
编辑 -
所以给定以下数据(仅由“CDT”和“CST”不同:
"Wed Mar 02 13:28:59 CDT 2011" and "Tue Mar 08 09:42:07 CST 2011"
目前它将返回如下:
MAX( STR_To_DATE( table.Timestamp , '%a %b %d %H:%i:%s CDT %Y' ) Returns - Wed Mar 02 13:28:59 CDT 2011
MAX( STR_To_DATE( table.Timestamp , '%a %b %d %H:%i:%s CST %Y' ) Returns - Tue Mar 08 09:42:07 CST 2011
无论如何,我希望它返回“Tue Mar 08 09:42:07 CST 2011”。
编辑2:
这是我的主要查询:
DELETE
FROM `table` main
WHERE STR_To_DATE( main.Timestamp , '%a %b %d %H:%i:%s CST %Y' ) <
(SELECT 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 `table` sub
WHERE sub.Retrieving_User = main.Retrieving_User )