【问题标题】:Time diff calculations where date and time are in seperate columns时间差异计算器,其中日期和时间位于不同的列中
【发布时间】:2011-02-15 02:54:40
【问题描述】:

我有一个查询,我试图获取两个不同时间之间的持续时间(例如 6.5 小时)。

在我的数据库中,时间和日期保存在不同的字段中,因此我可以有效地查询 startDate 或 endDate,因为我从不专门查询时间。

我的查询如下所示

SELECT COUNT(*), IFNULL(SUM(TIMEDIFF(endTime,startTime)),0) 从用户 = 18 的事件中选择

有时活动会在一夜之间进行,因此时间之间的差异也需要考虑日期之间的差异。

我一直在努力

SELECT COUNT(*), IFNULL(SUM(TIMEDIFF(CONCAT(endDate,' ',endTime),CONCAT(startDate,' ',startTime))),0) 从用户 = 18 的事件

不幸的是,当我这样做时,我只会得到错误,而且我似乎无法将这两个字段组合成一个时间戳。

【问题讨论】:

    标签: datetime mysql


    【解决方案1】:

    很确定您的问题是您的连接值被发送到TIMEDIFF() 作为字符串而不是日期时间。尝试在它们上调用DATETIME 函数:

    SELECT COUNT(*), IFNULL(SUM(TIMEDIFF(DATETIME(CONCAT(endDate,' ',endTime)),DATETIME(CONCAT(startDate,' ',startTime)))),0) FROM events WHERE user=18
    

    我面前没有 MySQL 数据库来测试它,但我认为您正在寻找它或某种类似形式的数据库。在涉及MICROSECOND 的 MySQL 文档中有一个例子:

    http://dev.mysql.com/doc/refman/5.0/en/datetime.html

    编辑:嗯...看起来 TIMEDIFF 应该与字符串一起使用。无论如何都值得一试。

    【讨论】:

      【解决方案2】:
      TIMEDIFF(endDate,startDate) + TIMEDIFF(endTime,startTime)
      

      【讨论】:

      • 谢谢詹姆斯,我最终不得不使用 HOUR(TIMEDIFF(endDate,startDate) + HOUR(TIMEDIFF(endTime,startTime),因为您概述它的方式是 8000 作为响应而不是 8
      • 没问题。尽管如此,你会失去小数部分。我没有安装mySQL来测试,SUM(TIMEDIFF(endDate,startDate),TIMEDIFF(endTime,startTime)) 怎么样
      猜你喜欢
      • 1970-01-01
      • 2020-02-14
      • 2010-11-07
      • 2019-09-25
      • 2016-02-02
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      相关资源
      最近更新 更多