在我的数据库中有如下表格
+----+-----------+----------+
| 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)但这不起作用。
答案 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 seconds,take the sum,然后convert back again。
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(duration))) FROM durationof
在sqlfiddle上查看。