mysql - 获取两个日期之间的天数、小时数和分钟数及其各自的时间戳

标签 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

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

最佳答案

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

相关文章:

php - fetch_array 内的 sqlsvr_fetch_array

sql - 合成范围内的 SQL 行

Mysql:SUM() 给出 4 倍的值与多个连接和 where 条件

java - OTRS REST Java 客户端

php - 导入 140 万行 800mb 制表符分隔文件的最佳方法是什么?

php - MYSQL 使用密码被拒绝访问(NO)

mysql - MYSQL 中的生产查询速度慢,但开发速度慢

sql - PostgreSQL 删除失败,继承表上有 ON DELETE 规则

c# - 如何使用 ConfigurationManager.AppSettings

mysql - OTRS fatal error