我试图从出发时间减去出发时间以获得旅行的持续时间。
到达/离开的格式为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分钟。将其作为整数然后进行计算。” 我该怎么做?
答案 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),这将无法正常工作。
不相关但是:您应该从不在varchar
或text
列中存储日期,时间或时间戳。 始终使用正确的数据类型。