Teradata 将大量分钟添加到时间戳导致溢出
Tearadata add large minutes to timestamp results in overflow
对于记录集,我有一个整数字段 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,
但似乎只输出整数,我认为有些是浮点数。
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
对于记录集,我有一个整数字段 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,
但似乎只输出整数,我认为有些是浮点数。
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