【问题标题】:Teradata timestamp subtraction with difference in minutes以分钟为单位的 Teradata 时间戳减法
【发布时间】:2021-07-25 12:19:10
【问题描述】:
select StartDatetime,EndDatetime,
(TRIM((COALESCE(CAST((CAST(EndDatetime AS TIME) - CAST(StartDatetime AS TIME) MINUTE(4)) AS INT),'')))) as TimeDiff
From Table1

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

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

【问题讨论】:

  • 你为什么要做这些演员? CAST(EndDatetime AS TIME) - CAST(StartDatetime AS TIME) .... 通过将 TIMESTAMP 值(包含您的日期 + 时间信息)转换为 TIME,则相关日期将丢失。我怀疑您需要执行类似于此处 (downloads.teradata.com/forum/database/…) 或此处 (stackoverflow.com/questions/49191484/…) 中描述的操作。对不起,我自己不是Teradata的普通用户,否则我可以直接回答问题

标签: sql teradata


【解决方案1】:

这是使用提取的一种方法:

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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2014-07-11
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 2020-06-08
    相关资源
    最近更新 更多