计算 Teradata 中的时间差
Calculate Difference between time in Teradata
我想取 2 个日期字段的差异,但都是 varchar 字段
语法编辑器代码片段:
start_time- 2018-03-02 06:31:22
end_time - 2018-03-02 06:33:32.478000
我希望结果的整数始终为 2 in min,并且它应该始终为整数
Result :- 2
如果有人能帮助实现我的案例,那就太好了。
谢谢
您可以使用 cast((cast(end_time as timestamp) - cast(start_time as timestamp) minute(4)) as int)
等间隔计算,但它会在 > 9999 分钟内失败。
这是 SQL UDF,用于无限制地计算以秒为单位的时间戳差异:
REPLACE FUNCTION TimeStamp_Diff_Seconds
(
ts1 TIMESTAMP(6)
,ts2 TIMESTAMP(6)
)
RETURNS DECIMAL(18,6)
LANGUAGE SQL
CONTAINS SQL
RETURNS NULL ON NULL INPUT
DETERMINISTIC
SQL SECURITY DEFINER
COLLATION INVOKER
INLINE TYPE 1
RETURN
(CAST((CAST(ts2 AS DATE)- CAST(ts1 AS DATE)) AS DECIMAL(18,6)) * 60*60*24)
+ ((EXTRACT( HOUR FROM ts2) - EXTRACT( HOUR FROM ts1)) * 60*60)
+ ((EXTRACT(MINUTE FROM ts2) - EXTRACT(MINUTE FROM ts1)) * 60)
+ (EXTRACT(SECOND FROM ts2) - EXTRACT(SECOND FROM ts1))
;
如果您无法创建 UDF,您可以复制源代码并应用最终 / 60
并将其转换为整数。
我想取 2 个日期字段的差异,但都是 varchar 字段
语法编辑器代码片段:
start_time- 2018-03-02 06:31:22
end_time - 2018-03-02 06:33:32.478000
我希望结果的整数始终为 2 in min,并且它应该始终为整数
Result :- 2
如果有人能帮助实现我的案例,那就太好了。
谢谢
您可以使用 cast((cast(end_time as timestamp) - cast(start_time as timestamp) minute(4)) as int)
等间隔计算,但它会在 > 9999 分钟内失败。
这是 SQL UDF,用于无限制地计算以秒为单位的时间戳差异:
REPLACE FUNCTION TimeStamp_Diff_Seconds
(
ts1 TIMESTAMP(6)
,ts2 TIMESTAMP(6)
)
RETURNS DECIMAL(18,6)
LANGUAGE SQL
CONTAINS SQL
RETURNS NULL ON NULL INPUT
DETERMINISTIC
SQL SECURITY DEFINER
COLLATION INVOKER
INLINE TYPE 1
RETURN
(CAST((CAST(ts2 AS DATE)- CAST(ts1 AS DATE)) AS DECIMAL(18,6)) * 60*60*24)
+ ((EXTRACT( HOUR FROM ts2) - EXTRACT( HOUR FROM ts1)) * 60*60)
+ ((EXTRACT(MINUTE FROM ts2) - EXTRACT(MINUTE FROM ts1)) * 60)
+ (EXTRACT(SECOND FROM ts2) - EXTRACT(SECOND FROM ts1))
;
如果您无法创建 UDF,您可以复制源代码并应用最终 / 60
并将其转换为整数。