我想像sum()这样的函数在mysql中添加数据类型时间列中的所有行

时间:2012-11-17 12:38:05

标签: mysql

在我的数据库中有如下表格

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

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

以下是该表的架构

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时间值。

我尝试从durationof;

中选择addtime(diration)

但这不起作用。

2 个答案:

答案 0 :(得分:2)

将转换为秒的Instread转换为总和,我很想在几秒钟内存储时间。

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

例如,如果您关心精度低至秒,请以秒为单位存储持续时间。例如,您可以将45存储45秒。如果你关心毫秒,你会把数据视为毫秒。换句话说,45000将被存储45秒。

然后你回到正常的总结。


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

您的具体情况可能会决定TIME或整数是否更适合使用。

答案 1 :(得分:2)

我完全不同意@Corbin's original answer。正如The TIME Type所述:

  

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

获取所有此类区间的总和:convert to secondstake the sum,然后convert back again

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

sqlfiddle上查看。