我正在为安装在 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
这似乎也不准确。我究竟做错了什么。请帮忙。
最佳答案
您的问题与 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;
关于mysql - 获取两个日期之间的天数、小时数和分钟数及其各自的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37593440/