BigQuery如何解析以冒号分隔毫秒的时间戳字符串
解析冒号分隔毫秒的时间戳字符串
你的问题出在格式符%E3S只支持小数点分隔的毫秒(如40.890),但你的时间戳用的是冒号(40:890),所以直接解析会失败。下面是两种可行的解决方法:
方法一:正则替换最后一个冒号为小数点
用regexp_replace匹配并替换最后一个冒号(确保只替换毫秒前的那个),再用标准格式解析:
select parse_timestamp('%Y-%m-%d %H:%M:%S.%f', regexp_replace('2017-08-18 16:04:40:890', ':(?=[0-9]{3}$)', '.'))
- 正则
:(?=[0-9]{3}$)的作用:匹配后面跟着三位数字且位于字符串末尾的冒号,避免替换前面的时分秒分隔符。 - 格式符
%S.%f用于解析秒+毫秒/微秒部分,三位毫秒会被正确识别。
方法二:拆分字符串后重新拼接
通过split_part按冒号拆分字符串,再将最后一段(毫秒)用小数点拼接回秒部分:
select parse_timestamp( '%Y-%m-%d %H:%M:%S.%f', concat( split_part('2017-08-18 16:04:40:890', ':', 1), ':', split_part('2017-08-18 16:04:40:890', ':', 2), ':', split_part('2017-08-18 16:04:40:890', ':', 3), '.', split_part('2017-08-18 16:04:40:890', ':', 4) ) )
内容的提问来源于stack exchange,提问作者Despicable me
相关产品推荐
相关产品推荐

