mysql ADDDATE问题更新记录

时间:2010-01-13 02:28:24

标签: php mysql time

我有以下sql语句:

start_time = ADDDATE(start_time, INTERVAL $minuteDelta MINUTE), 
end_time   = ADDDATE(end_time, INTERVAL $minuteDelta MINUTE)

start_timeend_time都是我数据库中的time字段(不是日期时间)

为了论证,

$minuteDelta为60

现在它不会抛出错误,但会将我的时间字段重置为00:00:00。这不应该工作吗? ADDTIME不起作用,因为它不接受我的jQuery插件给我的间隔(间隔)。 start_time和end_time有一些值,比如说14:00:00。

我有一个类似的声明,我在一个日期添加天数,它工作正常。这里有什么问题?

修改

整个查询

UPDATE events 
    SET start_date = DATE_ADD(start_date, INTERVAL 0 DAY), 
        end_date = DATE_ADD(end_date, INTERVAL 0 DAY), 
        start_time = ADDDATE(start_time, INTERVAL 60 MINUTE),
        end_time = ADDDATE(end_time, INTERVAL 60 MINUTE) 
    WHERE id='1'

2 个答案:

答案 0 :(得分:1)

试试这个:

$secondDelta = $minuteDelta * 60;

start_time = ADDTIME(start_time, SEC_TO_TIME($secondDelta)),
end_time = ADDTIME(end_time, SEC_TO_TIME($secondDelta))

答案 1 :(得分:1)

问题是ADDDATE需要一个完整的日期和时间作为参数,否则没有添加的上下文。仅传递01:23:45字符串/时间值作为第一个参数会发出警告(“截断的错误日期时间值”)并将其截断为NULL。如果您的时间为'23:59:59'并尝试增加时间,会发生什么?它可以滚动,但现在的背景是什么?你有一天获得了吗?它重置为零吗?在这样的计算中存在太多歧义。

无论如何,似乎没有能够产生你想要的功能。我认为你最接近的是SEC_TO_TIMETIME_TO_SEC。你可以这样做:

SELECT SEC_TO_TIME(TIME_TO_SEC('23:30:00') + 60);
-- returns 23:31:00

如果你在这里遇到翻滚场景,那么最终时间超过24小时:

SELECT SEC_TO_TIME(TIME_TO_SEC('23:59:30') + 60);
-- returns 24:00:30

你可以通过从SEC_TO_TIME的结果中减去86400(如果它是>)来调整翻转。 86400.这样的事情:

SELECT IF(
    TIME_TO_SEC('23:54:30') + 60 > 86400,
    SEC_TO_TIME(TIME_TO_SEC('23:54:30') + 60 - 86400),
    SEC_TO_TIME(TIME_TO_SEC('23:54:30') + 60)
);