2015-12-02 15 views
1

Это мой стол:TimeDiff от вычесть значение времени

+----------+---------------------+ 
    | estimate | timestamp   | 
    +----------+---------------------+ 
    | 05:00:00 | 2015-12-02 13:35:14 | 
    +----------+---------------------+ 
    1 row in set (0.00 sec) 

Я пытаюсь выполнить запланированное задание для создания лишних автомат Количество на строки каждый час, чтобы вычитать время, которое имеет прошлое от расчетного времени.

Я могу запустить запланированное задание и использовать timediff для вычисления времени, прошедшего с тех пор, но я не могу вычесть timediff с расчетного времени.

Я догадываюсь, что mysql не заботится о том, чтобы я хотел, чтобы расчетный столбец времени указывался как период времени. вместо этого он просто показывает мне время без даты.

select timediff(now(),timestamp) from t1; 

это дает мне разницу во времени, что мне нужно:

+---------------------------+ 
    | timediff(now(),timestamp) | 
    +---------------------------+ 
    | 00:27:03     | 
    +---------------------------+ 
    1 row in set (0.00 sec) 

, но когда я это сделать:

 select estimate-timediff(now(),timestamp) as timeleft from t1; 

результат является:

+----------+ 
    | timeleft | 
    +----------+ 
    | 46568 | 
    +----------+ 
    1 row in set (0.01 sec) 

, что я хотел бы получить:

+----------+ 
    | timeleft | 
    +----------+ 
    | 04:32:57 | 
    +----------+ 
    1 row in set (0.01 sec) 

Времена могут быть немного в моем примере, очевидно, из-за timediff(), но, надеюсь, вы понимаете мою проблему. Должно быть простое решение, которое мне не хватает, но я потратил полдня на googleing, чтобы добраться до этого момента, но timediff просто не сократит меня.

Пожалуйста, спасибо!

PS. Я еще не нашел решение, но я думаю, что нашел, что может вызвать проблему. Обрезание выполняется с использованием столбца «оценка» абсолютных значений »не использует секунды, поскольку это абсолютная величина, и результат полностью неправильный.

mysql> select abs(estimate) from t1; 
    +----------+ 
    | abs(estimate) | 
    +----------+ 
    | 50000 | 
    +----------+ 
    1 row in set (0.00 sec) 

и

mysql> select abs(timediff(now(),timestamp)) from t1; 
    +--------------------------------+ 
    | abs(timediff(now(),timestamp)) | 
    +--------------------------------+ 
    |       2318 | 
    +--------------------------------+ 
    1 row in set (0.00 sec) 

Так есть простой способ заставить MySQL использовать секунды на колонке времени? или что-то не так с моей таблицей, и формат оценки неправильный?

ответ

1

использование timediff так: -

timediff(estimate,timediff(now(),timestamp)) 

Ваш запрос: -

select timediff(estimate,timediff(now(),timestamp)) 
as timeleft from t1; 
+1

благодаря Rahautos, вы можете удалить другие комментарии (я удалил мой уже тогда я могу upvote и aprove этого решения.. с вашей помощью я вышел с этим решением: 'mysql> select *, timediff (now(), timestamp), sec_to_time (time_to_sec (оценка) -time_to_sec (timediff (now(), timestamp))) из t1;', но это довольно длинный и глупый. 'select timediff (оценка, timediff (now(), timestamp)) как время для m t1; 'работает блестяще и является простым решением, которое я искал ... – Gusmar

+0

, если бы я мог потерять фракции сейчас ... результат будет в этом формате:' 04: 10: 42.000', но мне бы хотелось чтобы быть следующим: '04: 10: 42' .... но это не имеет значения, поскольку я могу просто игнорировать их с помощью select. – Gusmar

Смежные вопросы