首页 > 解决方案 > 以分钟为单位的 Teradata 时间戳减法

问题描述

select StartDatetime,EndDatetime,
(TRIM((COALESCE(CAST((CAST(EndDatetime AS TIME) - CAST(StartDatetime AS TIME) MINUTE(4)) AS INT),'')))) as TimeDiff
From Table1

EndDatetime并且StartDatetime是类型的列Timestamp(6)。上面的查询以分钟为单位给出了时间戳之间的差异。如果两个时间戳都在同一天,则它正在工作。但是什么时候EndDatetime有一个明天的StartDatetime值,那么返回的 TimeDiff 值是一个负值。使用绝对函数不是最佳解决方案,因为 TimeDiff 数字本身并不准确。

如何以分钟为单位精确获取时间戳差异?

标签: sqlteradata

解决方案


这是使用 extract 的一种方法:

Select 
    StartDatetime,EndDatetime
    ,(CAST((CAST(EndDatetime AS DATE)- CAST(StartDatetime AS DATE)) AS DECIMAL(18,6)) * 60*24)
    + ((EXTRACT(HOUR FROM EndDatetime) - EXTRACT(HOUR FROM StartDatetime))* 60)
    + ((EXTRACT(MINUTE FROM EndDatetime) - EXTRACT(MINUTE FROM StartDatetime)))
    + ((EXTRACT(SECOND FROM EndDatetime) - EXTRACT(SECOND FROM StartDatetime))/60)
AS "Difference in Minutes"
from Table1 

推荐阅读