代码之家  ›  专栏  ›  技术社区  ›  sinDizzy

Tearadata向时间戳添加大的分钟数会导致溢出

  •  0
  • sinDizzy  · 技术社区  · 6 年前

    对于一个记录集,我有一个整数字段DTM,它是从基准日期算起的分钟数。为了从基准日期+分钟增量中得到旅行日期,我的第一反应是在Tearadata Studio中写下:

    timestamp '1984-01-01 00:00:00' AS "BASEDATE",
    BASEDATE + CAST(DTM AS INTERVAL MINUTE) AS TripDate
    

    查看INTERVAL MINUTE类型的规范,它包含一个SMALLINT,很容易被我的列DTM溢出。DTM的示例值为24282064。

    所以我的问题是如何在不损失精度的情况下得到计算的场TripDate?我应该换算成小时吗?还是几天?那能保持我原来的准确性吗?

    我试过:

    DTM/60 AS DTH,
    

    但似乎只输出整数,我认为有些是浮点数。

    0 回复  |  直到 6 年前
        1
  •  0
  •   dnoeth    6 年前

    Teradata将间隔限制为四个有效数字是非常愚蠢的(现在已经有将近20年的增强请求了),因此您总是需要一些解决方法。

    BASEDATE + (DTM * INTERVAL '0000 00:01' DAY TO MINUTE)
    

    Cast(DATE '1984-01-01' + (dtm / 1440) AS TIMESTAMP(0)) -- add days first
    + Cast(dtm MOD 1440 AS INTERVAL MINUTE)                -- add the remaining minutes