SEC_TO_TIME时间错误

时间:2013-02-07 13:01:14

标签: mysql datetime select

我正在测试查询,以确保他们回馈正确的结果。但是我注意到我的时间错了。我的一个时间戳是

  

2013-02-07 07:26:04

我减去:

  

2013-02-07 07:18:23

从第一个时间戳

这给了我十二分钟左右的差异。现在我不是数学天才,但我甚至可以说18 - 12 = 6 ...而不是12 ......所以我知道查询存在问题。所以我删除了SEC_TO_TIME,它给了我正确的时间差异:

+------------+-----------+--------------+----------------+--------+----------+
| session_id | anum      | first        | last           | why    | time     |
+------------+-----------+--------------+----------------+--------+----------+
|        220 | B00000000 | Testing      | thisout        | Other  | 00:07:41 |
+------------+-----------+--------------+----------------+--------+----------+


This is my query now : 


SELECT 
session.session_id, 
session.anum, 
student.first, 
student.last, 
session.why,
(TIMEDIFF(t.fin, session.signintime)) AS time 
FROM session 
INNER JOIN student 
    ON session.anum = student.anum  
LEFT JOIN (SELECT support.session_id, MAX(support.finishtime) AS fin FROM support GROUP BY support.session_id) AS t  
    ON t.session_id = session.session_id 
WHERE session.status = 3 

当我在TIMEDIFF之前添加SEC_TO_TIME时出现问题。

为什么会这样?

现在只是为了向你们展示SEC_TO_TIME的查询结果:

+------------+-----------+--------------+----------------+--------+----------+
| session_id | anum      | first        | last           | why    | time     |
+------------+-----------+--------------+----------------+--------+----------+
|        220 | B00000000 | Testing      | thisout        | Other  | 00:12:21 |
+------------+-----------+--------------+----------------+--------+----------+
2 rows in set (0.00 sec)

任何解释都很可爱。

2 个答案:

答案 0 :(得分:2)

00:07:41 = 741秒= 00:12:21是SEC_TO_TIME看到它的方式。该函数需要几秒钟,并将其格式转换为h:m:i。你已经把它作为h:m:i,在这里使用SEC_TO_TIME毫无意义。

答案 1 :(得分:2)

你已经有了时间格式,所以也许你希望将时间转换为秒

TIME_TO_SEC()

你的diff函数返回一个时间,而不是秒,那么你应该使用TIME_TO_SEC()