【问题标题】:mysql add column for hour difference between 2 datesmysql为2个日期之间的小时差添加列
【发布时间】:2013-06-21 11:48:21
【问题描述】:

我在 SQLfiddle 中编辑了一个 mysql 表:enter link description here

正如您在此处看到的,我想添加一个列来计算时间列和 NOW() 之间的差异(以小时为单位),但没有任何效果。

有什么提示吗?

【问题讨论】:

  • 将日期转换为 UNIX 时间戳、执行计算并将结果除以 3600 是否可以满足您的需求?

标签: mysql datetime select group-concat


【解决方案1】:

试试这个:

SELECT * ,HOUR(TIMEDIFF(STR_TO_DATE(Arbeitsbeginn, '%d.%m.%Y %H:%i:%s'), NOW()))
FROM (SELECT DRIVERNAME, GROUP_CONCAT(IF(ACTIONTEXT = 'Arbeitsbeginn', DATETIME, NULL)) AS 'Arbeitsbeginn', 
             GROUP_CONCAT(IF(ACTIONTEXT = 'Arbeitsende', DATETIME, NULL)) AS 'Arbeitsende', 
             GROUP_CONCAT(IF(ACTIONTEXT = 'PB', DATETIME, NULL)) AS 'Projektbeginn' 
      FROM geoImportRoot
      GROUP BY DRIVERNAME
     ) A;

查看SQL Fiddle Demo

输出:

|     DRIVERNAME |       ARBEITSBEGINN | ARBEITSENDE |       PROJEKTBEGINN | HOUR(TIMEDIFF(STR_TO_DATE(ARBEITSBEGINN, '%D.%M.%Y %H:%I:%S'), NOW())) |
-----------------------------------------------------------------------------------------------------------------------------------------------------
|   Marx, Ronald | 18.06.2013 06:32:09 |      (null) | 18.06.2013 06:32:12 |                                                                     77 |
| Richter, Mario | 18.06.2013 06:42:06 |      (null) | 18.06.2013 06:42:09 |                                                                     77 |
| Winkler, Mario | 18.06.2013 06:48:22 |      (null) |              (null) |                                                                     77 |

【讨论】:

    【解决方案2】:

    首先,最明智的做法可能是将时间戳存储为DATETIME 格式,而不是文本。如果您以文本形式指定时间戳,例如“2013-06-18 14:32:09”,那么 MySQL 会自动理解它们并将它们转换为 DATETIME 对象。

    如果您这样做,您可以索引您的 DATETIME 字段。当您的系统中有一百万个运输作业时,这将帮助您保持应用程序的性能。

    其次,函数TIMESTAMPDIFF(HOUR, NOW(), timestamp) 将产生整数小时数。您可能希望改用(1.0/3600.0) * TIMESTAMPDIFF(SECOND, NOW(), timestamp),这样您就可以计算小数小时数。

    第三,您在 sqlfiddle 中提供的摘要查询的完整性取决于每个工作人员在数据库中只有一项工作。只要里希特先生不止一次开车,他就会得到一个看起来像这样的 Arbeitsbeginn 结果:

     18.06.2013 06:42:06,19.06.2013 06:27:48
    

    【讨论】:

    • 好吧,这就是问题所在。我有这个新的小提琴sqlfiddle.com/#!2/44487/7 显示问题。有什么建议可以解决这个问题吗?
    • 您正在尝试进行透视操作,之所以这么说是因为您正在将信息从日志表的行透视到结果集的列。您需要找出一种明确的方式来关联每个特定任务的 Artbeitsbeginn、Arbeitsende 和 PB 日志条目。我恭敬地建议您为这个新主题开始一个新的 SO 问题。
    猜你喜欢
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 2014-02-17
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多