You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中提取日期并计算时长总分钟数的SQL实现

PostgreSQL 转换时间格式并计算时长分钟数的SQL实现

没问题,我来帮你搞定这个需求!我们需要处理两个核心任务:将varchar类型的ISO时间字符串转换成mm/dd/yyyy格式的日期,以及计算忽略秒数的总时长分钟数。

核心思路

  1. 转换日期格式:先用to_timestamp()把字符串转成PostgreSQL的timestamp类型,再用to_char()格式化成MM/DD/YYYY样式。
  2. 计算总分钟数:通过两个timestamp的差值得到interval类型,提取小时数乘以60加上分钟数,用floor()取整(忽略秒数部分)。

完整SQL代码(简洁版)

假设你的表名为your_table,替换成实际表名即可:

SELECT
    id,
    start_time,
    end_time,
    duration,
    -- 转换start_time为mm/dd/yyyy格式
    to_char(to_timestamp(start_time, 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"'), 'MM/DD/YYYY') AS "start",
    -- 转换end_time为mm/dd/yyyy格式
    to_char(to_timestamp(end_time, 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"'), 'MM/DD/YYYY') AS "end",
    -- 计算总分钟数(忽略秒数,取整)
    floor(
        EXTRACT(HOUR FROM (to_timestamp(end_time, 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"') - to_timestamp(start_time, 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"'))) * 60
        + EXTRACT(MINUTE FROM (to_timestamp(end_time, 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"') - to_timestamp(start_time, 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"')))
    ) AS duration_minutes
FROM your_table;

优化版(避免重复解析)

如果表数据量较大,重复解析时间字符串会影响性能,推荐用CTE提前转换时间戳:

WITH converted_times AS (
    SELECT
        id,
        start_time,
        end_time,
        duration,
        -- 提前解析时间戳,后续复用
        to_timestamp(start_time, 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"') AS start_ts,
        to_timestamp(end_time, 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"') AS end_ts
    FROM your_table
)
SELECT
    id,
    start_time,
    end_time,
    duration,
    to_char(start_ts, 'MM/DD/YYYY') AS "start",
    to_char(end_ts, 'MM/DD/YYYY') AS "end",
    floor(EXTRACT(HOUR FROM (end_ts - start_ts)) * 60 + EXTRACT(MINUTE FROM (end_ts - start_ts))) AS duration_minutes
FROM converted_times;

关键细节说明

  • to_timestamp()的格式字符串里,"T"和"Z"需要加双引号,因为它们是固定字符,不是时间格式占位符。
  • floor()函数用来忽略秒数的影响,比如0:00:10会计算为0分钟,和你给出的示例一致。
  • 如果你的表中存在格式不正确的时间字符串,可能会报错,建议先验证数据格式的一致性。

内容的提问来源于stack exchange,提问作者Symphony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:09:21