2013-05-26 37 views

回答

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) 
2

这将是您的最佳表现选项(计算日期范围外部和使用BETWEEN)。投射你桌子的每一行将会显着变慢。

UPDATE records SET firstname="bob" 
WHERE lastname="jones" 
    AND timer BETWEEN '2013-05-26' AND '2013-05-27' 
+0

高效,但它也会更新行'2013-05-27 00:00:00'' –

+0

是的,有时数据导入将带来整个一天,就好像它发生在midnite冲程 – Drew

+0

@ypercube - 总是可以使用'BETWEEN'2013-05-26'AND'2013-05-26 23:59:59'' - 取决于是否需要1秒的精度... –

0

可以转换为DATE落时间部分,然后比较眼前这个。

UPDATE records SET firstname="bob" WHERE lastname="jones" AND CAST(timer AS DATE) = CAST(NOW() AS DATE) 
0

我会

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

注意,很可能会做奇怪的事情,如果你有改变时区,在这种情况下,我会改变一切成时代,即

where unix_timestamp(...pseudo code to get the proper midnight) <= unix_timestamp(timer) 
相关问题