减去两次得到持续时间

Subtracting two times to get duration

我正在尝试从到达时间中减去出发时间以获得行程持续时间。

arrival/departure的格式为HH:MM。

我正在使用 postgresql,时间列只是说 'string' 它们是如何定义的。一位朋友帮助我将它们转换为整数,但我仍然坚持这一点:

SELECT x, cast (table1.arrival as integer) - cast (table.1departure as integer), sum(y), count(*)
FROM table1 INNER JOIN table2
ON .....
GROUP BY .....
ORDER BY.... 

一个朋友告诉我的,但我不太确定他的意思:"No you need to create a new variable for just minutes. 1:30 = 90 minutes. Cast that as integer then compute."我该怎么做?

如果您的 RDBMS 是 Mysql,您可以使用 MySQL DATEDIFF() 函数

例如:

SELECT DATEDIFF(arrivale,departure) AS DiffDate

我这里假设到达和离开是在同一天。 到达和离开的时间日期格式如 HH:MM.

如果该列确实是 varchar(或 text),那么您需要先将该列转换为适当的时间。

SELECT x, table1.arrival::time - table.1departure::time, sum(y), count(*)
FROM table1 INNER JOIN table2
ON .....
GROUP BY .....
ORDER BY.

如果存储在列中的时间不是 24 小时格式的正确格式时间(例如 22:40),上述操作将失败

time - time 的结果是 interval。如果你想在分钟内得到结果,你需要从区间中提取它们:

extract(epoch from table1.arrival::time - table.1departure::time) / 60 

extract(epoch ..) returns 间隔中的秒数,这就是为什么你需要将它除以 60 才能得到分钟数。

然而,如果到达和离开时间不在同一天,这将无法正常工作(例如,出发时间为 23:25,到达时间为第二天的 07:23)


不相关但是:您应该从不varchartext列中存储日期、时间或时间戳。 始终 使用正确的数据类型。