2013-05-22 38 views
1

我有一个数据库表,其中包含每个记录的时间戳。每天这个数据库都会被一个cron更新,该cron被设置为在gmt午夜(23:59:00)之前1分钟运行。我们正在将cron更改为现在午夜(00:00:00)运行,因此我需要更新在第二天23:59到00:00记录的所有字段(2013-05-21 23:59 :00应更新至2013-05-22 00:00:00)。将时间添加到数据库中具有特定时间戳的行

更新脚本被设置为捕获脚本启动时的时间戳,但由于写得不好,所以没有记录秒,所以有些记录的启动时间为2013-05-21 23:59:01,有些可能有2013-05-20 23:59:02甚至2013-05-19 23:59:03。所有这些都需要更新到第二天的00:00:00。

有成千上万的记录没有被cron更新,因此有随机的时间戳。 这些记录需要不受影响。例如2013-05-19 23:13:47,2013-05-19 02:50:56和2013-05-19 16:42:13都应该保持不变。

我认为从this post下面的代码是有点沿着我所寻找的线,但一些谷歌搜索和测试自己后,我没有太多的运气。

UPDATE table 
SET `time` = CASE 
       WHEN CURRENT_TIMESTAMP>='23:59:00' 
       THEN CURRENT_TIMESTAMP + INTERVAL 1 MINUTE 
       ELSE CURRENT_TIMESTAMP END 
+0

的时间可以'23:59:15' ? – Devart

+0

随着23:59:xx的任何时间都可以安全地更新到午夜,但我认为我发现运行的最新cron发生在23:59:04,如果它很重要。 –

+0

是的,它很重要。 – Devart

回答

1

尝试此查询 -

UPDATE 
    table 
SET 
    `time` = DATE(`time`) + INTERVAL 1 DAY 
WHERE 
    TIME(`time`) >= '23:59:00' 
+0

工作出色!非常聪明,谢谢。 –