SparkSQL计算两个时间戳整数天数差的推荐实现方案咨询
SparkSQL 计算带时分秒精度的整数天数差方案
SparkSQL 内置DATEDIFF函数设计上仅对比两个时间参数的日期部分,完全忽略时分秒,因此会出现你遇到的计算结果和预期不符的情况。
推荐实现方式
Spark 3.1及以上版本可以直接使用内置TIMESTAMPDIFF函数完成需求,该函数支持指定时间单位,会基于完整的时间戳精度计算实际满24小时的天数差,示例代码如下:
-- 函数参数顺序为 TIMESTAMPDIFF(单位, 开始时间, 结束时间) SELECT TIMESTAMPDIFF(DAY, CAST('2021-07-01 19:10:28' AS TIMESTAMP), CAST('2021-07-10 02:26:16' AS TIMESTAMP))
上述查询返回结果为预期的8,和手动转秒计算的结果一致,代码更简洁易读。
低版本兼容方案
如果使用的Spark版本低于3.1,不支持TIMESTAMPDIFF函数,可以用unix_timestamp简化原有转long计算的写法:
SELECT CAST((unix_timestamp('2021-07-10 02:26:16') - unix_timestamp('2021-07-01 19:10:28')) / 86400 AS INTEGER)
内容的提问来源于stack exchange,提问作者LMF
相关产品推荐
相关产品推荐

