我想更新 MySql 数据库中时间戳字段值在当天内的行。
例如类似的东西
UPDATE records
SET firstname="bob"
WHERE lastname="jones"
AND timer=[today]
所有转换或修改字段的解决方案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)
这将是您表现最好的选项(从外部计算日期范围并使用 BETWEEN)。投射表格的每一行都会明显变慢。
UPDATE records SET firstname="bob"
WHERE lastname="jones"
AND timer BETWEEN '2013-05-26' AND '2013-05-27'
您应该可以在更新中使用 DATE_SUB(NOW()) 。
这是帮助:http ://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-add
您可以转换为 DATE 以删除时间部分,然后仅进行比较。
UPDATE records SET firstname="bob" WHERE lastname="jones" AND CAST(timer AS DATE) = CAST(NOW() AS DATE)
我会这样做
where date(timer) = date(now())
请注意,如果您有时区更改,可能会做一些奇怪的事情,在这种情况下,我会将所有内容更改为纪元,即
where unix_timestamp(...pseudo code to get the proper midnight) <= unix_timestamp(timer)