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