减去两次得到持续时间
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)
不相关但是:您应该从不在varchar
或text
列中存储日期、时间或时间戳。 始终 使用正确的数据类型。
我正在尝试从到达时间中减去出发时间以获得行程持续时间。
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)
不相关但是:您应该从不在varchar
或text
列中存储日期、时间或时间戳。 始终 使用正确的数据类型。