Trino中如何处理trip_duration并保留Timestamp类型?
Trino中处理时长字段的解决方案
首先明确:直接将截取后的“0:00:08”格式字符串转为Timestamp不可行。因为Timestamp类型代表的是具体日期时间点(如2024-05-20 12:30:45),而“0:00:08”是时长信息,不符合Timestamp的格式规范,自然无法转换成功。
正确的处理思路是用Trino的INTERVAL类型存储时长(而非Timestamp),具体操作步骤如下:
截取目标字符串片段
原始trip_duration格式为“0 00:00:15.216”,需要去掉前2个字符(“0 ”)和后4个字符(“.216”),用substring函数实现:substring(cast(trip_duration as varchar), 3, length(cast(trip_duration as varchar)) - 6)执行后会得到“00:00:15”格式的字符串。
转换为INTERVAL类型
将截取后的字符串转为INTERVAL HOUR TO SECOND类型,既能正确存储时长信息,也保留了时长的计算能力:cast( substring(cast(trip_duration as varchar), 3, length(cast(trip_duration as varchar)) - 6) as interval hour to second ) as processed_trip_duration调整为“0:00:08”格式(可选)
如果需要去掉小时部分的前导零,用replace函数处理即可:cast( replace( substring(cast(trip_duration as varchar), 3, length(cast(trip_duration as varchar)) - 6), '00:', '0:' ) as interval hour to second ) as processed_trip_duration
如果仅需要展示“0:00:08”格式,直接保留字符串类型即可,但会失去时长的计算特性,建议优先使用INTERVAL类型匹配业务语义。
内容的提问来源于stack exchange,提问作者Maggie Liu
相关产品推荐
相关产品推荐

