【问题标题】:SEC_TO_TIME time errorSEC_TO_TIME 时间错误
【发布时间】:2013-01-22 23:43:10
【问题描述】:

我正在测试查询以确保它们返回正确的结果。但是我注意到我弄错了时间。我的时间戳之一是

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)

任何解释都会很可爱。

【问题讨论】:

    标签: mysql datetime select


    【解决方案1】:

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

    【讨论】:

    • 那么问题来了,如果是这种情况,那么我将如何正确格式化秒?由于 SEC_TO_TIME 将 741 变为 12:21 这是不正确的,因为我想将 741 变为 HH:MM:SS
    • 嗯……741怎么不是12分21秒?
    • 好吧,如果实际时差是 7Minutes:41Seconds 那么 SEC_TO_TIME 会将其视为 741 = 这将使输出为 12 分钟。但如果时间实际上是 7:41 那么 12 是不正确的
    • 哦,那将是一个整数。 7*60+21。如果您已经将其格式化为 HH:MM:SS,为什么还要使用 SEC_TO_TIME?该函数的存在需要几秒钟,原始的,未格式化的,并使其对人类可读。
    【解决方案2】:

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

    TIME_TO_SEC()
    

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

    【讨论】:

    • 嗯,不,我问的是为什么我的时间不同,我不需要更改任何时间的格式。
    猜你喜欢
    • 2012-08-18
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2013-03-05
    • 2013-08-28
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多