这是我的表:
+----------+---------------------+
| 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在时间列上使用秒数吗?或者我的桌子有问题,估计格式错了吗?
答案 0 :(得分:1)
像这样使用timediff
: -
timediff(estimate,timediff(now(),timestamp))
您的查询: -
select timediff(estimate,timediff(now(),timestamp))
as timeleft from t1;