我想更新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