Tearadata добавляет большие минуты к отметкам времени и приводит к переполнению - PullRequest
0 голосов
/ 01 марта 2019

Для набора записей у меня есть целочисленное поле 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 голосов
/ 01 марта 2019

Ограничение 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
...