获取两个日期之间的日,小时和分钟及其各自的时间戳

时间:2016-06-02 13:34:25

标签: mysql sql otrs

我正在为安装在mysql或postgres上的OTRS创建一个查询。 我有以下日期时间格式:NOW() = 2016-06-02 09:23:01, t.createtime = 2015-11-26 09:41:02

我正在尝试计算日期/时间字段之间的天数,小时数和分钟数。

以下是查询:

SELECT q.name as QueueName, t.tn as TicketNumber, t.title, ts.name as Status, tp.name as Priority, 
DATEDIFF(NOW(), t.create_time),
NOW(),
t.create_time

FROM ticket t
LEFT JOIN ticket_state ts on ts.id = t.ticket_state_id
LEFT JOIN ticket_priority tp on tp.id = t.ticket_priority_id
LEFT JOIN queue q on q.id = t.queue_id
WHERE 
ts.type_id NOT IN (3) 
and ts.type_id NOT IN (7)

我将如何做到这一点。我尝试过它似乎不受支持的年龄函数。我也试过这个:

CONCAT(
FLOOR(HOUR(TIMEDIFF(NOW(), t.create_time)) / 24), ' days ',
MOD(HOUR(TIMEDIFF(NOW(), t.create_time)), 24), ' hours ',
MINUTE(TIMEDIFF(NOW(), t.create_time)), ' minutes') as Age

这似乎也不准确。我究竟做错了什么。请帮忙。

1 个答案:

答案 0 :(得分:2)

您的问题与OTRS无关,但与您正在使用的数据库无关。

在MySQL上,您应该使用TIMESTAMPDIFF() - 您使用TIMEDIFF()但返回TIME,且不能超过839小时。

SELECT
  TIMESTAMPDIFF(DAY, TIMESTAMP('2016-06-04 00:00:00'), NOW()) AS days,
  MOD(TIMESTAMPDIFF(HOUR, TIMESTAMP('2016-06-04 00:00:00'), NOW()), 24) AS hours,
  MOD(TIMESTAMPDIFF(MINUTE, TIMESTAMP('2016-06-04'), NOW()), 60) AS minutes;

在PostgreSQL上,您可以使用AGE()DATE_PART()来检索在PostgreSQL中指定的单位差异。 AGE()需要两个时间戳并返回一个间隔。

SELECT DATE_PART('month', AGE(NOW(), TIMESTAMP '2016-04-19 10:23:54')) AS months,
       DATE_PART('hour',  AGE(NOW(), TIMESTAMP '2016-04-19 10:23:54')) AS hours,
       DATE_PART('day',   AGE(NOW(), TIMESTAMP '2016-04-19 10:23:54')) AS days,
       DATE_PART('hour',  AGE(NOW(), TIMESTAMP '2016-04-19 10:23:54')) AS hours;