【发布时间】:2021-01-29 08:39:38
【问题描述】:
我有一个字符串类型的配置单元字段,其时间戳格式如下: 高:毫米:秒 毫米:ss ss 我需要将它们转换如下:
Input:
10:30:40
30:40
40
Output Expected:
10:30:40 = (10*3600) + (30 * 60) + 40 = 37,840
30:40 = (30 * 60) + 40 = 1840
40 = 40 = 40
我试着做这样的事情
case
when duration like '%:%:%' then
split(duration, ':')[0] * 3600 +
split(duration, ':')[1] * 60 +
split(duration, ':')[2]
when duration like '%:%' then
split(duration, ':')[0] * 60 +
split(duration, ':')[1]
else
duration
end
这可行,但似乎效率低下。当我必须处理数十亿条记录时,有没有更好的方法来做同样的事情。
【问题讨论】:
-
列
duration的数据类型是什么? -
String : 抱歉忘了在我的原帖中提及!
-
那么你的方法对我来说很好。
-
你能假设一些事情重写 sql 吗? 1. 用这个
LEN(duration) -LEN(REPLACE(duration,':'))=2 或1 替换like。 2. 是否可以用substr替换split?例如,如果您知道前 2 个字符将在那里,那么您可以使用SUBSTR(duration,1,2) * 3600等等。如果您想了解更多信息,我可以在 sql 方面提供帮助。
标签: sql time hive timestamp hiveql