我想更新MySql数据库中的一行,其中时间戳字段值在当前日期之内。如何更新时间戳字段是今天的mysql行?
例如像
UPDATE records
SET firstname="bob"
WHERE lastname="jones"
AND timer=[today]
我想更新MySql数据库中的一行,其中时间戳字段值在当前日期之内。如何更新时间戳字段是今天的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'
高效,但它也会更新行'2013-05-27 00:00:00'' –
是的,有时数据导入将带来整个一天,就好像它发生在midnite冲程 – Drew
@ypercube - 总是可以使用'BETWEEN'2013-05-26'AND'2013-05-26 23:59:59'' - 取决于是否需要1秒的精度... –
您应该可以在更新中使用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)
今天在何种意义上..2013-05-26,周日或时间戳??? – Yogus