mysql为2个日期之间的小时差异添加列

时间:2013-06-21 11:48:21

标签: mysql datetime select group-concat

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

正如你在那里看到的那样,我想在几小时内添加一个用于计算时间列和NOW()之间差异的列,但没有任何效果。

任何提示?

2 个答案:

答案 0 :(得分: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 |

答案 1 :(得分:1)

首先,您最明智的做法是以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