BigQuery:字符串类型Timestamp列转换为DATETIME类型报错的解决方法
解决BigQuery中带Z后缀的字符串转DATETIME的问题
这个问题我之前也碰到过,核心原因是你用的CAST(timestamp AS DATETIME)无法直接处理带Z(UTC时区标识)的RFC3339格式字符串,而且原字符串的微秒部分也需要特定的解析规则。下面给你两种可靠的解决方案:
方法1:先转TIMESTAMP再转DATETIME
BigQuery的TIMESTAMP类型原生支持解析带Z后缀的UTC时间字符串,所以我们可以先把字符串转成TIMESTAMP,再转换为DATETIME(同时明确指定时区为UTC,避免时区转换错误):
SELECT DATETIME(CAST(timestamp AS TIMESTAMP), 'UTC') AS converted_datetime FROM `bigquery_table` LIMIT 1000
这个方法的优势是兼容性强,不用手动写格式字符串,BigQuery会自动识别RFC3339格式的时间戳。
方法2:使用PARSE_DATETIME指定格式
如果你想更精确地控制解析规则,可以用PARSE_DATETIME函数,搭配对应的格式字符串来匹配你的时间格式:
SELECT PARSE_DATETIME('%Y-%m-%dT%H:%M:%E6SZ', timestamp) AS converted_datetime FROM `bigquery_table` LIMIT 1000
这里的格式字符串%Y-%m-%dT%H:%M:%E6SZ对应你的时间格式:
%Y-%m-%d:年月日T:分隔日期和时间的固定字符%H:%M:%E6S:时分秒+6位微秒Z:匹配末尾的时区标识
为什么原来的CAST会失败?
CAST(... AS DATETIME)期望的是不带时区后缀的时间字符串(比如2022-02-09 12:01:51.911821),而你的字符串末尾的Z会被视为无效字符,导致解析报错。
内容的提问来源于stack exchange,提问作者emilk
相关产品推荐
相关产品推荐

