更改字符串值的mysql日期格式
我有一个名为Timestamp的字段,它将其值存储为文本,而不是实际的时间戳。不幸的是,日志应用程序是不可更改的 所以 我一直在开发一个查询,用它作为时间戳选择器清除除最近一行以外的所有行,这也将字符串转换为日期->更改字符串值的mysql日期格式,mysql,Mysql,我有一个名为Timestamp的字段,它将其值存储为文本,而不是实际的时间戳。不幸的是,日志应用程序是不可更改的 所以 我一直在开发一个查询,用它作为时间戳选择器清除除最近一行以外的所有行,这也将字符串转换为日期-> MAX( STR_To_DATE( table.Timestamp , '%a %b %d %H:%i:%s CDT %Y' ) 我的查询非常有效 但是,我发现字符串值->'CDT'->在'CDT'和'CST'之间变化,这取决于当前时间是否为夏令时。在夏令时,它记录为“CDT”,
MAX( STR_To_DATE( table.Timestamp , '%a %b %d %H:%i:%s CDT %Y' )
我的查询非常有效
但是,我发现字符串值->'CDT'->在'CDT'和'CST'之间变化,这取决于当前时间是否为夏令时。在夏令时,它记录为“CDT”,反之亦然
因此,当我运行此->
MAX( STR_To_DATE( table.Timestamp , '%a %b %d %H:%i:%s CDT %Y' )
MAX( STR_To_DATE( table.Timestamp , '%a %b %d %H:%i:%s CST %Y' )
当我运行此命令时,所有包含“CDT”的行都会被忽略->
MAX( STR_To_DATE( table.Timestamp , '%a %b %d %H:%i:%s CDT %Y' )
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
我希望它能在2011年3月8日星期二09:42:07 CST返回,无论发生什么
编辑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 )
将两者结合起来。表示返回集合中的第一个非空值
在本例中,它将首先尝试使用CDT解析它。如果失败,返回NULL,它将尝试使用CST进行解析。如果失败,它将到达合并列表的末尾并返回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
尝试更改表中的数据,并查看它是否工作。如果失败,它是否返回NULL?如果是这样,您可以合并这两个表达式…@Ic-yes,它将为timestamp字段返回NULL。Coalesce?我已经修改了我的帖子以包含我的主查询-它旨在根据用户ID和时间戳字段删除除最近添加的行以外的所有行。现在是说-1242-子查询返回超过1行…不确定这意味着什么…@hacket您忘记了最大值,所以它返回所有行!=子查询返回多行尝试单独运行子查询,您将看到它返回表中的所有行。@Ic-非常好:这看起来非常有效,谢谢!