Tearadata向时间戳添加大量时间会导致溢出

时间:2019-02-28 23:48:36

标签: date integer overflow teradata

对于一个记录集,我有一个Integer字段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,

但是似乎只输出整数,并且我认为某些将是浮点数。

1 个答案:

答案 0 :(得分:0)

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

如果已知间隔少于27年:

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