Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改字符串值的mysql日期格式_Mysql - Fatal编程技术网

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

更改字符串值的mysql日期格式,mysql,Mysql,我有一个名为Timestamp的字段,它将其值存储为文本,而不是实际的时间戳。不幸的是,日志应用程序是不可更改的 所以 我一直在开发一个查询,用它作为时间戳选择器清除除最近一行以外的所有行,这也将字符串转换为日期-> MAX( STR_To_DATE( table.Timestamp , '%a %b %d %H:%i:%s CDT %Y' ) 我的查询非常有效 但是,我发现字符串值->'CDT'->在'CDT'和'CST'之间变化,这取决于当前时间是否为夏令时。在夏令时,它记录为“CDT”,

我有一个名为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' )
 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-非常好:这看起来非常有效,谢谢!