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

如何在Snowflake中计算两个Timestamp差值并输出DD HH24:MI:SS格式

在Snowflake中格式化Timestamp时间差为DD HH24:MI:SS.FFFFFF格式

可以通过组合日期函数+字符串拼接的方式实现,比单独拆分天/时/分/秒更简洁,具体方案如下:

核心思路

  1. 先计算两个Timestamp之间的完整天数差
  2. 再计算扣除完整天数后剩余的时间间隔(时分秒部分)
  3. 将天数与格式化后的剩余时间拼接,得到目标格式

示例SQL

假设你的两个Timestamp字段分别为ts1和ts2,以下是可直接复用的代码:

SELECT
    CONCAT(
        DATEDIFF(DAY, ts1, ts2),
        ' ',
        TO_CHAR(
            DATEADD(DAY, -DATEDIFF(DAY, ts1, ts2), ts2 - ts1),
            'HH24:MI:SS.FFFFFF'
        )
    ) AS time_diff_formatted
FROM (
    -- 测试数据
    SELECT
        TO_TIMESTAMP('11/23/2015 09:14:29', 'MM/DD/YYYY HH24:MI:SS') AS ts1,
        TO_TIMESTAMP('11/5/2018 12:45:33', 'MM/DD/YYYY HH24:MI:SS') AS ts2
) AS test_data;

代码解释

  • DATEDIFF(DAY, ts1, ts2):计算两个时间点之间的完整天数差(示例中得到1078)
  • ts2 - ts1:Snowflake支持直接对Timestamp做减法得到INTERVAL类型的时间差
  • DATEADD(DAY, -DATEDIFF(DAY, ts1, ts2), ts2 - ts1):从总时间差中扣除完整天数,得到剩余的时分秒间隔
  • TO_CHAR(..., 'HH24:MI:SS.FFFFFF'):将剩余时间格式化为带微秒的时分秒字符串(示例中得到03:31:04.000000)
  • CONCAT(...):把天数和格式化后的时分秒拼接成目标格式

运行结果

上述测试SQL会输出:1078 03:31:04.000000,完全符合期望格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:02:46