如何从Postgres中的date_time(ISO格式)计算时差(HH:MM:SS)

时间:2018-05-05 02:50:12

标签: sql postgresql datetime-format

我在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执行此操作?

1 个答案:

答案 0 :(得分:4)

与此问题无关,但是:您应该从不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;

从另一个时间戳中减去一个时间戳的结果是interval,如果需要,可以format

相关问题