【问题标题】:Getting Days, Hours and Minutes between two dates with their respective time stamps获取两个日期之间的天数、小时数和分钟数及其各自的时间戳
【发布时间】:2016-06-02 13:34:24
【问题描述】:

我正在为安装在 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

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

【问题讨论】:

  • 你使用的是 MySQL 还是 Postgresql?
  • 它可以同时配置。我相信是 MySql。

标签: mysql sql otrs


【解决方案1】:

您的问题与 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;

【讨论】:

  • 我无法使用AGE功能。
  • 那是因为您使用的不是 PostgreSQL,而是 MySQL。我已经更新了我的答案以包含一个 MySQL 示例。
猜你喜欢
  • 1970-01-01
  • 2017-05-03
  • 2012-05-19
  • 1970-01-01
  • 2012-12-03
  • 2019-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多