如何在 Teradata 中计算持续时间(以小时为单位)
How to calculate duration in hours in Teradata
我正在处理一个要求,我必须计算两个日期派生日期时间列之间的持续时间。结果应该以小时为单位。
(DateField1 + TimeField1) - (DateField2 + TimeField2)
有什么建议吗?
谢谢!
你可以尝试用TIMESTAMP
计算,用HOUR(4)得到hour
SELECT cast((DateField1 + TimeField1)as TIMESTAMP) - cast((DateField2 + TimeField2)as TIMESTAMP) HOUR(4)
您需要的输出 (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;
注意:以上逻辑最多可以处理2个时间戳之间的9999小时的时差,如果你想处理更大的值那么你可以考虑将Day(4)添加到Second(4)并相应地更新逻辑
Table想玩&数据
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)
我正在处理一个要求,我必须计算两个日期派生日期时间列之间的持续时间。结果应该以小时为单位。
(DateField1 + TimeField1) - (DateField2 + TimeField2)
有什么建议吗?
谢谢!
你可以尝试用TIMESTAMP
计算,用HOUR(4)得到hour
SELECT cast((DateField1 + TimeField1)as TIMESTAMP) - cast((DateField2 + TimeField2)as TIMESTAMP) HOUR(4)
您需要的输出 (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;
注意:以上逻辑最多可以处理2个时间戳之间的9999小时的时差,如果你想处理更大的值那么你可以考虑将Day(4)添加到Second(4)并相应地更新逻辑
Table想玩&数据
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)