【问题标题】:How to calculate duration in hours in Teradata如何在 Teradata 中计算持续时间(以小时为单位)
【发布时间】:2019-01-07 05:46:59
【问题描述】:

我正在处理一个要求,我必须计算两个日期派生日期时间列之间的持续时间。结果应该以小时为单位。

(DateField1 + TimeField1) - (DateField2 + TimeField2) 

有什么建议吗?

谢谢!

【问题讨论】:

  • 您能提供一些示例数据并期待吗?

标签: sql syntax teradata


【解决方案1】:

您需要的输出 (DateField1 + TimeField1) - (DateField2 + TimeField2)

相当于 (DateField1 - DateField2) + (TimeField1 - TimeField2)

如果您只需要以小时为单位的时间戳差异(忽略分钟和秒)

select ((DateField1 - DateField2) HOUR(4))+( (TimeField1 - TimeField2) HOUR(4)) required_output from dateTable;

如果您想要考虑小时、分钟和秒的时间戳差异

SELECT (DateField1 - DateField2) HOUR(4) to SECOND(4) t1, (TimeField1 - TimeField2) HOUR(4) to SECOND(4) t2, EXTRACT(HOUR from t1)+EXTRACT(MINUTE from t1)/60.0 +EXTRACT(SECOND from t1)/(60.0*60.0) t1_HOUR, EXTRACT(HOUR from t2)+EXTRACT(MINUTE from t2)/60.0 +EXTRACT(SECOND from t2)/(60.0*60.0) t2_HOUR, t1_HOUR+t2_HOUR required_output FROM dateTable;

注意:以上逻辑可以处理两个时间戳之间最大 9999 小时的时间差,如果你想处理更大的值,那么你可以考虑将 Day(4) 添加到 Second(4) 并相应地更新逻辑

表和数据,如果你想玩

CREATE volatile table dateTable( DateField1 TIMESTAMP(0),DateField2 TIMESTAMP(0),TimeField1 TIMESTAMP(0),TimeField2 TIMESTAMP(0))on commit preserve rows; INSERT INTO dateTable VALUES (current_date,current_date-1,current_date-2,current_date-3)

【讨论】:

  • 感谢您的详细解释。从中学到了一些新东西。谢谢!
【解决方案2】:

你可以尝试通过TIMESTAMP计算,使用HOUR(4)得到hour

SELECT cast((DateField1 + TimeField1)as TIMESTAMP) - cast((DateField2 + TimeField2)as TIMESTAMP) HOUR(4)

【讨论】:

  • 工作。谢谢!
  • @MeetRohan 如果对您有帮助,您可以标记此答案或点赞:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
  • 2017-06-29
  • 2016-06-03
  • 2022-12-10
  • 2021-05-17
  • 1970-01-01
相关资源
最近更新 更多