从时间值中减去timediff

时间:2015-12-02 12:16:02

标签: mysql time difference

这是我的表:

    +----------+---------------------+
    | 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()但希望你理解我的问题。我必须有一个简单的解决方案,但我已经花了半天的时间来达到这一点,但是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 个答案:

答案 0 :(得分:1)

像这样使用timediff: -

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

您的查询: -

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