0

在我的数据库中有如下表

+----+-----------+----------+
| id | fk_id     | duration |
+----+-----------+----------+
|  1 |        23 | 00:00:31 |
|  2 |        23 | 00:00:36 |
|  3 |       677 | 00:00:36 |
|  4 |       678 | 00:00:36 |
+----+-----------+----------+

在上表中,列持续时间是数据类型 time 。

以下是该表的架构

Create Table: CREATE TABLE `durationof` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fk_id` int(11) NOT NULL,
  `duration` time NOT NULL,
  PRIMARY KEY (`id`))

这里只是我想在查询的持续时间列中添加所有时间,我该怎么做?

就像 sum 函数一样,是否有任何函数可以添加所有 mysql time vales 。

我尝试从 durationof 中选择 addtime(diration);

但这行不通。

4

2 回答 2

2

如果要转换为秒来求和,我会很想以秒为单位存储时间。

特别是,您可以存储某种类型的整数(int、smallint、bigint 等),而不是存储 TIME。您将确定最小的度量单位并存储在其中。

例如,如果您关心精确到秒,则以秒为单位存储持续时间。例如,您可以存储4545 秒。如果您关心毫秒,您会将数据视为毫秒。换句话说,45000将存储 45 秒。

然后你又回到了正常的求和状态。


或者,如果您想坚持使用 TIME,请使用 eggyval 的答案。

您的具体情况可能会决定使用 TIME 还是整数更好。

于 2012-11-17T12:42:11.807 回答
2

我完全不同意@Corbin 的原始答案。如The TIMEType下所述:

TIME 值的范围可以从'-838:59:59''838:59:59'。小时部分可能很大,因为该TIME类型不仅可以用于表示一天中的某个时间(必须小于 24 小时),还可以用于表示经过的时间或两个事件之间的时间间隔(可能远大于 24小时,甚至负数)。

取所有这些间隔的总和:转换为 seconds取总和,然后再转换回来

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(duration))) FROM durationof

sqlfiddle上查看。

于 2012-11-17T13:47:00.207 回答