在BigQuery中如何从含时区信息的时间戳中提取日期
问题解决方法
首先明确两次报错的核心原因:
- 第一次调用
DATE(Timestamp)报错,是因为Timestamp字段为字符串类型,常用数据库(如BigQuery、Spark SQL)的DATE()函数无法直接识别末尾带[时区名]后缀的时间字符串,自动类型转换失败。 - 第二次解析失败,是因为
PARSE_TIMESTAMP传入的格式匹配规则%Y%m%d和实际输入的字符串格式完全不匹配,该规则仅能解析20240520这类无分隔符的纯数字日期串。
正确实现代码
你只需要先通过匹配的格式规则把字符串解析为原生时间戳类型,再转日期即可:
-- 通用写法,默认用UTC时区转日期 DATE( PARSE_TIMESTAMP("%Y-%m-%dT%H:%M:%S%Ez[%Z]", Timestamp) ) AS LastUpdateDate
如果需要按照数据自带的斯德哥尔摩时区计算日期(避免时区偏移导致日期差1天的问题),可以给DATE函数指定时区参数:
-- 按欧洲/斯德哥尔摩时区转日期 DATE( PARSE_TIMESTAMP("%Y-%m-%dT%H:%M:%S%Ez[%Z]", Timestamp), "Europe/Stockholm" ) AS LastUpdateDate
上述代码里的格式规则和你的输入字符串完全对应:
%Y-%m-%d匹配年-月-日部分T匹配字符串里的时间分隔符T%H:%M:%S匹配时:分:秒部分%Ez匹配带冒号的时区偏移量(比如+01:00)[%Z]匹配方括号包裹的时区名称(比如[Europe/Stockholm])
内容的提问来源于stack exchange,提问作者Serge de Gosson de Varennes
相关产品推荐
相关产品推荐

