我在 Postgres 中有一个表 T1,如下所示:
| event | Date_Time |
|-------|--------------------------|
| start | 2018-04-30T06:09:30.986Z |
| run | 2018-04-30T10:37:38.044Z |
| end | 2018-04-30T11:39:38.044Z |
Date_Time 是 ISO 格式(存储为 varchar),我需要计算 Date_Time 的差异,以便我的输出如下:
| event | Date_Time | Time_Difference |
|-------|--------------------------|-----------------|
| start | 2018-04-30T06:09:30.986Z | 4:28:08 |
| run | 2018-04-30T10:37:38.044Z | 1:02:00 |
| end | 2018-04-30T11:39:38.044Z | |
(10:37:38 - 06:09:30 = 4:28:08)
我如何使用 SQL 执行此操作?
最佳答案
与问题无关,但是:您应该永远将时间戳(或日期或数字)值存储在varchar
中。
您首先必须将 varchar 值转换为时间戳。如果值的格式确实正确,您可以简单地将它们转换为:Date_Time::timestamp
- 或者转换为 timestamptz
。
据我所知,您希望结果中的下一行 有所不同。这可以通过 window function 来实现lead()
select event,
Date_Time,
date_time::timestamp - lead(date_time::timestamp) over (order by date_time::timestamp) as time_difference
from the_table
order by date_time;
关于sql - 如何计算时差(HH :MM:SS) from date_time (ISO format) in Postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50185237/