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

Redshift存储时长字段并转换为秒的技术问题咨询

Redshift时长类数据存储与转换方案

1. 原始时长数据存储类型建议

你给出的时长格式(含天的d.hh:mm:ss.fffffff和不含天的hh:mm:ss)不属于Redshift INTERVAL类型默认支持的标准格式,直接存入INTERVAL会触发解析错误。如果需要完整保留原始字符串内容,建议选用 VARCHAR(20) 类型:

  • 按照最长可能的格式计算(5位天数+小数点+时分秒+7位微秒),20个字符长度完全覆盖所有可能的取值,不会造成空间浪费
  • 不会改变API返回的原始内容,方便后续溯源校验

2. 时长转秒实现方案与秒值字段类型

转换逻辑

可以通过Redshift内置的字符串拆分函数实现格式转换,兼容两种时长格式的SQL实现如下:

WITH duration_split AS (
  SELECT
    original_duration,
    -- 拆分天部分,无天则默认0
    CASE WHEN strpos(original_duration, '.') > 0 
         THEN split_part(original_duration, '.', 1)::BIGINT 
         ELSE 0 END AS days,
    -- 提取时分秒部分
    CASE WHEN strpos(original_duration, '.') > 0 
         THEN split_part(original_duration, '.', 2) 
         ELSE original_duration END AS hms_part
  FROM your_table
)
SELECT
  original_duration,
  -- 计算总秒数:天*86400 + 时*3600 + 分*60 + 秒
  days * 86400 
  + split_part(hms_part, ':', 1)::INT * 3600 
  + split_part(hms_part, ':', 2)::INT * 60 
  + split_part(hms_part, ':', 3)::FLOAT AS duration_seconds
FROM duration_split;

秒值字段类型建议

  • 如果需要保留微秒级精度,且对数值准确性要求高,建议选用 NUMERIC(18,6) 类型,避免浮点运算误差
  • 如果对精度要求不高,仅需要近似值,可选用 FLOAT 类型
  • 如果不需要小数部分,仅保留整数秒,直接选用 INT 类型即可,单字段可覆盖最长约68年的时长取值,完全满足车辆行驶时长的存储需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:12:05