在我的数据库中有如下表格
+----+-----------+----------+
| 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`))
在这里,我只想在查询的持续时间列中添加所有时间,我该怎么做?
就像求和函数一样,是否有任何函数可以添加所有 mysql 时间值。
我尝试从持续时间中选择添加时间(分配);
但这行不通。
我完全不同意@Corbin最初的回答。 如TIME
类型中所述:
TIME 值的范围可以从
'-838:59:59'
到'838:59:59'
。小时部分可能很大,因为TIME
类型不仅可以用于表示一天中的时间(必须小于 24 小时),还可以用于表示两个事件之间的经过时间或时间间隔(可能远大于 24 小时,甚至为负数)。
要取所有这些间隔的总和:转换为秒,取总和,然后再次转换回来。
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(duration))) FROM durationof
在sqlfiddle上看到它。
转换为秒来做总和,我很想只以秒为单位存储时间。
特别是,您可以存储某种类型的整数(int,smallint,bigint等),而不是存储TIME。 您将确定最小的度量单位并存储在其中。
例如,如果您关心精确到秒的精度,请以秒为单位存储持续时间。 例如,您可以将45
存储 45 秒。 如果您关心毫秒,则会将数据视为毫秒。 换句话说,45000
将存储 45 秒。
然后你又回到了正常的求和状态。
或者,如果你想坚持使用TIME,那就选择eggyval的答案。
您的具体情况可能会决定使用 TIME 还是整数更好。