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

如何在DuckDB中将INTERVAL转换为毫秒数以实现聚合计算?

DuckDB中INTERVAL类型聚合计算的解决方案

DuckDB不支持直接对INTERVAL类型执行sum()这类聚合函数,报错提示很明确——得先转成数值类型计算,再转回INTERVAL。

简便转换方法

不用手动拆分年、月、日、时分秒写复杂公式,直接用extract(epoch from interval_col)函数,它能把INTERVAL直接转换成以秒为单位的浮点数,自动处理所有时间单位的转换,省心又准确。

求和示例

计算所有downtime的总时长,最终转回INTERVAL类型:

SELECT to_interval(sum(extract(epoch from duration))) AS total_duration
FROM downtimes;

如果需要以毫秒为单位计算,先把秒数乘1000,再用to_milliseconds转回INTERVAL:

SELECT to_milliseconds(sum(extract(epoch from duration) * 1000)) AS total_duration_ms
FROM downtimes;

百分比计算示例

计算单条downtime时长占总时长的百分比:

WITH total_duration AS (
    SELECT sum(extract(epoch from duration)) AS total_epoch
    FROM downtimes
)
SELECT 
    duration,
    ROUND((extract(epoch from duration) / total_duration.total_epoch) * 100, 2) AS duration_percentage
FROM downtimes, total_duration;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:39:59