减去两次以获得持续时间

时间:2016-03-25 17:27:26

标签: sql postgresql datetime casting numeric

我试图从出发时间减去出发时间以获得旅行的持续时间。

到达/离开的格式为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.... 

一位朋友告诉我这个,但我不完全确定他的意思:“不需要在几分钟内创建一个新变量.1:30 = 90分钟。将其作为整数然后进行计算。” 我该怎么做?

2 个答案:

答案 0 :(得分:0)

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

例如:

SELECT DATEDIFF(arrivale,departure) AS DiffDate

我在这里假设到达和出发是在同一天。 而到达谷和离开的TimeDate就像HH:MM一样形成。

答案 1 :(得分:0)

如果列确实是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 ..)会返回间隔中的秒数,这是您需要将其除以60以获得分钟的原因。

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

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