2

我想更新 MySql 数据库中时间戳字段值在当天内的行。

例如类似的东西

UPDATE records 
   SET firstname="bob" 
 WHERE lastname="jones" 
   AND timer=[today]
4

5 回答 5

2

所有转换或修改字段的解决方案timer都不会让索引工作,这意味着这些查询会很慢。同样@Stevens 的回答我会写:

UPDATE records 
   SET firstname="bob" 
 WHERE lastname="jones" 
   AND timer >= cast(curdate() as datetime) 
   AND timer < cast(curdate() + interval 1 day as datetime);

那么你每次都有正确的一天。

编辑:错了

   AND timer => cast(curdate() as datetime) 

更正了

   AND timer >= cast(curdate() as datetime) 
于 2013-05-26T17:32:43.740 回答
1

这将是您表现最好的选项(从外部计算日期范围并使用 BETWEEN)。投射表格的每一行都会明显变慢。

UPDATE records SET firstname="bob" 
WHERE lastname="jones" 
    AND timer BETWEEN '2013-05-26' AND '2013-05-27'
于 2013-05-26T17:17:24.010 回答
0

您应该可以在更新中使用 DATE_SUB(NOW()) 。

这是帮助:http ://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-add

于 2013-05-26T17:18:05.590 回答
0

您可以转换为 DATE 以删除时间部分,然后仅进行比较。

UPDATE records SET firstname="bob" WHERE lastname="jones" AND CAST(timer AS DATE) = CAST(NOW() AS DATE)
于 2013-05-26T17:19:44.727 回答
0

我会这样做

where date(timer) = date(now())

请注意,如果您有时区更改,可能会做一些奇怪的事情,在这种情况下,我会将所有内容更改为纪元,即

where unix_timestamp(...pseudo code to get the proper midnight) <= unix_timestamp(timer)
于 2013-05-26T17:24:03.110 回答