我正在为安装在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
这似乎也不准确。我究竟做错了什么。请帮忙。
答案 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;