【问题标题】:Time stamp calculation on SQL queriesSQL 查询的时间戳计算
【发布时间】:2018-09-13 02:13:34
【问题描述】:

我正在尝试以数据时间格式 (00:00:00) 显示每个客户的总旅行时间

但我对是否应该这样做感到困惑

SEC_TO_TIME(SUM(结束时间 - 开始时间))

SEC_TO_TIME(SUM(TIME_TO_SEC(结束时间 - 开始时间)))

SEC_TO_TIME(SUM(TIME_TO_SEC(结束时间) - TIME_TO_SEC(开始时间))

如果结束时间和开始时间是日期时间格式

哪一个应该是正确的方法。第一个和第二个得到不同的结果

【问题讨论】:

  • 如果旅行需要 100 个小时会怎样?您想举报100:10:05 之类的内容吗?以小时为单位报告是否更有意义,可能包含小数部分?
  • 我们被告知用 HH/MM/SS 来表达。我只是好奇我们是否应该在计算前将时间更改为秒并再次返回

标签: mysql sql database datetime


【解决方案1】:

第一个:

使用UNIX_TIMESTAMPendtimestarttime 转换为时间戳

第二个:

减去它们

注意:结果将以秒为单位

(UNIX_TIMESTAMP(endtime) - UNIX_TIMESTAMP(starttime))

确定客户消耗了多少时间

第三:

将结果转换为时间

SEC_TO_TIME( (UNIX_TIMESTAMP(endtime) - UNIX_TIMESTAMP(starttime)) )

所以你的最终查询应该是这样的

SELECT SEC_TO_TIME( (UNIX_TIMESTAMP(endtime) - UNIX_TIMESTAMP(starttime)) ) FROM travel

【讨论】:

  • 如果开始日期和结束日期已经是时间戳,我们不必转换它?
【解决方案2】:

在您的三个选项中,我建议:

SEC_TO_TIME(SUM(TIME_TO_SEC(endtime) 

- TIME_TO_SEC(开始时间))

首先,我认为这是您想要做的最清楚的:

  • 将日期/时间转换为秒
  • 加起来秒数
  • 转换回时间

其次,MySQL 将日期/时间值视为数字上下文中的数字。这会产生奇怪的结果,因为 2018-09-13 变成了 20,180,913,而这通常不是您想要的。

【讨论】:

    猜你喜欢
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多