将毫秒转换为DDDD:HH:mm:ss时发生配置单元/SQL错误
我有一个以毫秒为单位的输出,它太大了,无法用HH:mm:ss格式描述,我需要扩展到DDDD:HH:mm:ss 我目前使用的代码仅适用于大数字:将毫秒转换为DDDD:HH:mm:ss时发生配置单元/SQL错误,sql,hive,timestamp,hiveql,unix-timestamp,Sql,Hive,Timestamp,Hiveql,Unix Timestamp,我有一个以毫秒为单位的输出,它太大了,无法用HH:mm:ss格式描述,我需要扩展到DDDD:HH:mm:ss 我目前使用的代码仅适用于大数字: select from_unixtime(cast(floor(2513702864/1000) as bigint), 'DDDD:HH:mm:ss'); 给出:0030:02:15:02,这是正确的 select from_unixtime(cast(floor(17259/1000) as bigint), 'DDDD:HH:mm:ss');
select from_unixtime(cast(floor(2513702864/1000) as bigint), 'DDDD:HH:mm:ss');
给出:0030:02:15:02,这是正确的
select from_unixtime(cast(floor(17259/1000) as bigint), 'DDDD:HH:mm:ss');
给出:0001:00:00:17,这不正确
select from_unixtime(cast(floor(127259/1000) as bigint), 'DDDD:HH:mm:ss');
给出:0001:00:02:07,这也不正确
select from_unixtime(cast(floor(127259/1000) as bigint), 'DDDD:HH:mm:ss');
当处理较小的毫秒时,如何修复DDDD部分中错误的1?逻辑很简单。BIGINT timestamp是从Unix历元(1970-01-01 00:00:00 UTC)传递的秒数或毫秒数 要获取毫秒部分,请使用
(ts%1000)
-除以1000后返回提醒
要获得传递的总整秒数,请使用(ts div 1000)
-返回整数部分,所有其他数字将根据该数字计算:天、小时、分钟、秒
天数:(ts div 1000)div 86400
-返回总秒数除以一天中秒数后的整数部分
要获取全天计算后剩余的小时数:在天计算后获取提醒((ts div 1000)%86400)
并除以小时中的秒数,获取整数部分((ts div 1000)%86400)div 3600)
等等
演示:
结果:
1 29:02:15:02.864 --29 whole days, 2 hours, 15 minutes, 2 seconds, 864 millis
2 0:00:00:17.259 --17 whole seconds and 259 millis
3 0:00:02:07.259 --two whole minutes, 7 seconds and 259 millis
4 0:00:00:01.272 --one whole second and millis
5 0:00:00:00.127 --we have only milliseconds
1970-01-30 02:15:02.864
现在您可以看到此计算结果与_unixtime返回的结果之间的差异。
对于记录id=1,整个天数为29天。为什么from_unixtime返回30(对于'D')?因为整整29天过去了,我们在新的30天里有2小时15分2秒864英里。换句话说,from_unixtime返回格式化的时间戳,而查询中的计算返回格式化的间隔,“一年中的一天”和“从中经过的整天”是不同的
希望,现在是晴朗的一天
另见类似问题:
如果需要将以毫秒为单位的bigint时间戳转换为保留毫秒的字符串(yyyy-MM-dd HH:MM:ss.SSS
),请使用以下命令:
select concat(from_unixtime(ts div 1000), '.', (ts % 1000)) as timestamp_with_millis
from (select bigint(2513702864) as ts) s
结果:
1 29:02:15:02.864 --29 whole days, 2 hours, 15 minutes, 2 seconds, 864 millis
2 0:00:00:17.259 --17 whole seconds and 259 millis
3 0:00:02:07.259 --two whole minutes, 7 seconds and 259 millis
4 0:00:00:01.272 --one whole second and millis
5 0:00:00:00.127 --we have only milliseconds
1970-01-30 02:15:02.864
请解释最初的任务。不清楚你在做什么。DDDD是什么意思,为什么是四个D???一年有365天。。。总有那么一天:今天,昨天,明天,如果你按照你的模式,它将是一年中的某一天,而不是零。因为函数返回时间戳格式,所以我只想以天+小时+彩信+秒为单位显示毫秒。现在,当你解释一年中的一天时,它现在是有意义的,因为1只是一年中的一天,但我只是尝试将毫秒转换为天,而不将其定义为一年中的一天。如果超过十年,天数可以超过365天。有没有一种方法可以直接转换为天而不使用年?@leftjoin你认为有什么解决方法吗?你是最好的!