【问题标题】:calculate a sum of type time using sql使用 sql 计算类型时间的总和
【发布时间】:2016-10-03 22:41:26
【问题描述】:

如何计算我的名为“timeSpent”的结肠的时间总和,格式如下:HH:mm 在 SQL 中?我正在使用 MySQL。

我的专栏类型是时间。

它有这个结构

时间从 10:00:00 12:00:00 02:00:00 时间到 08:00:00 09:15:00 01:15:00 所花费的时间 总时间 03:15:00

【问题讨论】:

  • RDBMS:mysql。如果总和为 02:10:30,则查询 select SUM(timespent) from mytablename 不会像我想要的那样工作,它显示为 021030。
  • 你的意思是你有 2 列时间从和时间到?你的数据库是什么? SELECT sum(DATEDIFF(minute, timeFrom,timeUntil)) from TableName
  • 是类型时间造成的。它需要一个我不知道的特定功能,请帮忙。
  • 我认为 datediff 是为了得到 2 次之间的差异,而不是我记得的总和
  • @kawtousse:我们的时间也很宝贵。请只更新原始问题,而不是发布重复的问题。

标签: sql mysql


【解决方案1】:
SELECT  SEC_TO_TIME( SUM( TIME_TO_SEC( `timeSpent` ) ) ) AS timeSum  
FROM YourTableName  

这对我有用。希望这会有所帮助。

【讨论】:

  • 我花了很多时间浏览网络,这就是我正在寻找的答案。谢谢!
  • TIME 项目的最大绝对值为 838:59:59,或 +/- 3020399 秒(不到 35 天)。所以这个答案虽然正确,但当您在总和上使用 SEC_TO_TIME() 时可能会溢出。溢出被静默截断到最大值。小心求和许多时间值。
  • 在 MySQL 服务器 8.0.13 上工作。请注意@O.Jones 所说的内容。
【解决方案2】:

100% 工作代码从 MYSQL 数据库中获取时间总和:

SELECT
SEC_TO_TIME( SUM(time_to_sec(`db`.`tablename`))) 
As timeSum
FROM
`tablename`

尝试并确认。 谢谢。

【讨论】:

  • 与三年前发布的答案相同?为什么?
【解决方案3】:

如果timeSpent 列的数据类型是TIME,您应该可以使用以下查询:

SELECT SUM(timeSpent) 
  FROM YourTableName    -- replace YourTableName with the actual table name

但是,如果不是这种情况,您可能必须使用强制转换来转换为 Time 数据类型。像这样的东西应该可以工作:

SELECT SUM(timeSpent - CAST('0:0:0' as TIME)) 
  FROM YourTableName    -- replace YourTableName with the actual table name

【讨论】:

  • hmm.. 你能发布你到目前为止的表定义和查询吗?
【解决方案4】:

在 MySQL 中,您可以执行以下操作来获取时间间隔:

SELECT TIMEDIFF('08:00:00', '10:00:00');

然后添加时间间隔,你会这样做:

SELECT ADDTIME('01:00:00', '01:30:00');

很遗憾,您没有存储日期或使用 24 小时制,因此这些计算最终会不正确,因为您的 TimeUntil 实际上低于您的 TimeFrom

另一种方法是(假设您解决了上述问题)使用TIMESTAMPDIFF() 将时间间隔存储为秒:

UPDATE my_table SET time_spent=TIMESTAMPDIFF(start, end));
SELECT SEC_TO_TIME(SUM(time_spent)) FROM my_table;

【讨论】:

    猜你喜欢
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多