如何对文本列求和

时间:2018-09-25 17:58:05

标签: sql postgresql

我有一个表,该表包含3列,即start_date,end_date和它们之间的差异。

开始列为“ 2018-09-25 10:00:00”,结束列为“ 2018-09-25 11:00:00”,另一个为文本列,其结果为“ 01” :00',但我需要对SQL查询中的结果求和,但这不起作用。我已经尝试过

select sum(to_timestamp(third_column)::time) as sum from my_table.

3 个答案:

答案 0 :(得分:1)

您甚至不需要第3列,因为它还是从前2列衍生而来。

使用此示例数据:

WITH t(start_date, end_date) AS
(
                SELECT TIMESTAMP'2018-09-25 10:00', TIMESTAMP'2018-09-25 11:00'
    UNION ALL   SELECT '2018-09-25 7:00', '2018-09-25 07:45'
)

以下查询将为您提供结束日期和开始日期之间的差值总和(以间隔为单位):

SELECT SUM(end_date - start_date) FROM t

结果以时间间隔01:45:00

答案 1 :(得分:1)

demo: db<>fiddle

SELECT 
    SUM(to_timestamp(diff, 'HH24:MI')::time) 
FROM times;

A:to_timestamp()将文本转换为时间戳。第二个参数用于描述时间格式(HH24是24小时格式的小时,MI是分钟; https://www.postgresql.org/docs/current/static/functions-formatting.html)。时间戳包括日期部分。使用::time强制转换可以将其截断。

B:SUM()汇总所有时间值。

答案 2 :(得分:0)

我想使用以下方法应该可以

select sum(third_column::time) from data

dbfiddle demo