更改字符串值的mysql日期格式

时间:2012-08-29 15:30:46

标签: mysql

我有一个名为Timestamp的字段,它将其值存储为文本而不是实际的时间戳。不幸的是,日志记录应用程序是不可更改的。

所以

table.Timestamp -> text field with format -> "Wed Mar 02 13:28:59 CDT 2011"

我一直在开发一个查询来清除除最近一行之外的所有行,使用它作为我的Timestamp选择器,它也将字符串转换为日期 - >

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 )

1 个答案:

答案 0 :(得分:2)

合并两者。 COALESCE表示返回集合中的第一个非空值。

在这种情况下,它将首先尝试使用“CDT”解析它。如果失败,返回NULL,它将尝试使用“CST”进行解析。 (如果失败,它将到达coalesce列表的末尾并返回NULL,但在你的情况下它不会那么远)。

select MAX( COALESCE(STR_To_DATE( test.Timestamp , '%a %b %d %H:%i:%s CDT %Y' ), STR_To_DATE( test.Timestamp , '%a %b %d %H:%i:%s CST %Y' )))
from test

SQL Fiddle尝试更改表格中的数据并查看其是否有效。