简体   繁体   English

减去时间戳

[英]subtracting timestamps

I thought this would be a really simple thing, but I'm having a hard time finding any answers! 我认为这将是一件非常简单的事情,但我很难找到任何答案!

I have a support table, with added_on and closed_on fields that track when support tickets were opened and closed. 我有一个支持表,其中包含added_onclosed_on字段,用于跟踪何时打开和关闭支持票据。

I'd like to run a query that (closed_on - added_on) to show the duration a ticket was open. 我想运行一个查询(closed_on - added_on)来显示(closed_on - added_on)单打开的持续时间。 Both fields are timestamp format. 这两个字段都是timestamp格式。 This is not as simple as I thought it would be... 这并不像我想象的那么简单......

Ideally, final output would be X days Y hours Z minutes but I'd be happy just to get total seconds or something, I can certainly take it from there. 理想情况下,最终输出将是X days Y hours Z minutes但我很高兴只得到总秒数或其他东西,我当然可以从那里拿走它。

Sample data: 样本数据:

[id]  [added_on]             [closed_on]
 1    2010-01-01 00:10:20    2010-01-02 00:10:20   
 1    2010-01-03 00:00:01    2010-01-03 13:30:01   

Use: 使用:

SELECT CONCAT(DATEDIFF(closed_on, added_on), 
              ' days ', 
              SUBSTRING_INDEX(TIMEDIFF(closed_on, added_on), ':', 1), 
              ' hours ', 
              SUBSTR(TIMEDIFF(closed_on, added_on), INSTR(TIMEDIFF(closed_on, added_on), ':')+1, 2),  
              ' minutes')

With your example data, that gives me: 使用您的示例数据,这给了我:

0 days 00 hours 00 minutes
0 days 13 hours 30 minutes

You can use TIMESTAMPDIFF to get the difference in seconds: 您可以使用TIMESTAMPDIFF来获得以秒为单位的差异:

SELECT TIMESTAMPDIFF(SECOND,closed_on,added_on)...

Edit: Another way would be to use UNIX_TIMESTAMP: 编辑:另一种方法是使用UNIX_TIMESTAMP:

SELECT UNIX_TIMESTAMP(closed_on)-UNIX_TIMESTAMP(added_on)...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM