我有以下sql语句:
start_time = ADDDATE(start_time, INTERVAL $minuteDelta MINUTE),
end_time = ADDDATE(end_time, INTERVAL $minuteDelta MINUTE)
start_time
和end_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'
答案 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_TIME和TIME_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)
);