文章 查看内容

如何计算返回2个时分秒日期的差值

如何计算返回2个时分秒日期的差值

203 0 可视化分析 2024-11-28 17:31 发布者: 观小益

背景有些业务场景,需要计算2个日期之间的差值,但是这个日期字段是不完整的,只有时分秒部分,比如 10:10:03 AM - 10:32:07 AM = -00:22:04,想得到这个结果,该如何计算呢?此时需要结合spark文本、日期和时间、字 ...

背景

有些业务场景,需要计算2个日期之间的差值,但是这个日期字段是不完整的,只有时分秒部分,比如 10:10:03 AM - 10:32:07 AM = -00:22:04,想得到这个结果,该如何计算呢?此时需要结合spark文本、日期和时间、字符串等函数共同处理,接下来介绍具体步骤。

1 年月日补全,计算时间差秒数

新建字段补全年月日并计算秒差,

SECONDDIFF(current_date()||" "||"10:10:03",current_date()||" "||"10:32:07")

公式里的时分秒替换为需要参与计算的文本字段,结果是一个数值

2 分解时间差并格式化

2.1 将时间差秒数通过数学运算分别转换为小时、分钟、秒对应的整数值

得到小时数(取整):floor(abs([秒差]/3600))

得到分钟数(取整):floor(abs([秒差]%3600)/60)

得到秒数(取整):abs([秒差]%60)

2.2 格式化

根据时间差秒数的正负情况,使用case when语句在格式化字符串前添加相应的正负号(如果小于 0 则添加-,否则为空字符串)

然后,对于小时、分钟、秒这些数值,使用lpad函数进行补零操作,确保它们都以两位数字的形式呈现(例如,数字 5 会被补零为05),

再通过concat_ws函数按照:作为分隔符将各部分拼接起来,从而得到类似-00:22:04这样符合要求的格式化字符串。

 

case when [秒差] < 0 then '-' else '' end||concat_ws(':', lpad([], 2, '0'), lpad([], 2, '0'), lpad([], 2, '0'))

相关文档参考:

1Spark SQL文本函数及应用

https://docs.guandata.com/article/1/428146476024070144.html

2)函数清单

https://docs.guandata.com/article/1/575217989738037248.html

3Spark 日期函数及应用

https://docs.guandata.com/article/1/428146642139480064.html


路过

雷人

握手
1

鲜花

鸡蛋

刚表态过的朋友 (1 人)

评论

您需要登录后才可以发表言论 登录立即注册
微信服务号
联系我们
电话:400-880-0750
邮箱:hello@guandata.com
Copyright © 2001-2025 观远社区 版权所有 All Rights Reserved. 浙 ICP 备15006424号-3
去评论 去发文 返回顶部
返回顶部