BigQuery中如何将ISO格式日期字符串转换为TIMESTAMP类型
BigQuery中ISO格式日期字符串转TIMESTAMP类型方案
你手上的2022-03-22T00:23:30.000Z是标准UTC时区的ISO 8601时间格式,不需要手动截取子串处理,BigQuery原生支持解析这类格式,下面是两种可直接用的实现方式:
最简方案:直接使用
TIMESTAMP()函数隐式转换
BigQuery的TIMESTAMP类型构造函数默认兼容带Z后缀的ISO 8601字符串,不需要额外指定格式规则,转换结果可以直接和CURRENT_TIMESTAMP()做比较运算:-- 单值转换示例 SELECT TIMESTAMP("2022-03-22T00:23:30.000Z") AS converted_timestamp表字段使用示例,筛选近30天的数据:
SELECT * FROM `your_project.your_dataset.your_table` WHERE TIMESTAMP(your_date_string_column) >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)显式解析方案:使用
PARSE_TIMESTAMP()匹配完整格式
之前调用该函数报错是因为格式串没有完全匹配字符串结构,需要对应写全毫秒、时区标识的格式符:%Y-%m-%d匹配年-月-日段T匹配日期和时间之间的固定分隔符T%H:%M:%E3S匹配时:分:秒.三位毫秒的时间段%Ez匹配末尾代表UTC时区的Z标识
正确写法示例:
SELECT PARSE_TIMESTAMP("%Y-%m-%dT%H:%M:%E3S%Ez", "2022-03-22T00:23:30.000Z") AS converted_timestamp
注意:手动截取子串移除末尾Z和0的方案不推荐,一旦遇到毫秒数非全0、或者字符串长度有波动的脏数据,很容易出现转换错误,优先用原生支持的解析逻辑稳定性更高。
内容的提问来源于stack exchange,提问作者commonparadox
相关产品推荐
相关产品推荐

