Mysql - 如果声明,请更新

时间:2010-11-17 17:39:02

标签: mysql sql-update

我正在尝试构建一个可以在日期时间戳中添加/减去秒数的查询。

这是我目前的

    UPDATE `table` 
    SET end_dt = DATE_ADD(end_dt, INTERVAL (15 - TIMESTAMPDIFF(SECOND, NOW(), end_dt)) SECOND)
    WHERE DATE_SUB(end_dt, INTERVAL 15 second) <= NOW()

基本上是将日期时间重置为距离当前时间仅剩15秒(如果不到15秒)。

我想添加一个IF条件,如果基于'end_dt'剩下超过15秒,它只会增加一秒。

3 个答案:

答案 0 :(得分:1)

使用MySQL的IF函数。

UPDATE `table` SET end_dt = 
IF(end_dt > DATE_ADD(NOW(),INTERVAL 15 second),
DATE_ADD(NOW(), INTERVAL 1 SECOND),
DATE_ADD(NOW(), INTERVAL 15 SECOND))
WHERE end_dt >= NOW()

我在WHERE子句的一半上隔离了end_dt,因此如果存在,则可以使用end_dt上的索引。

您的意思是更新所有行吗?

答案 1 :(得分:0)

将其拆分为两个更新查询,一个用于您想要的IF语句的每个分支。

答案 2 :(得分:0)

我不确定我理解这个问题,但这是一个镜头:

UPDATE `table` 
   SET end_dt = IF(end_dt = 15,
                   DATE_ADD(end_dt, INTERVAL (15 - TIMESTAMPDIFF(SECOND, NOW(), end_dt)) SECOND),
                   end_dt)
    WHERE DATE_SUB(end_dt, INTERVAL 15 second) <= NOW()

这说,“如果end_dt为15,则添加内容,否则保持不变。”我确定“end_dt = 15”不是你想做的比较,但这可能会告诉你你需要做什么。