sql - 如何计算时差(HH :MM:SS) from date_time (ISO format) in Postgres

标签 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 执行此操作?

最佳答案

与问题无关,但是:您应该永远将时间戳(或日期或数字)值存储在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如果你愿意的话。

关于sql - 如何计算时差(HH :MM:SS) from date_time (ISO format) in Postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50185237/

相关文章:

SQL Server 规范化策略 : varchar vs int Identity

java - 按两个属性分组并映射到不同的对象

用于查找组中最新记录的sql

c# - 如何减去和舍入时间

java - 使用什么系统默认日期格式?

vb.net - Ultragrid 列中的日期时间格式

c# - 使用 C# 在 access 2007 中更改链接表的源表

sql - 同步两个xml文档的tsql代码

postgresql - 为什么这个 crosstab() 查询返回重复键?

java - 使用 hibernate 从数据库访问值时出现异常