BigQuery类型转换问题:字符串转Datetime及yyyymmdd格式int64转TIMESTAMP
嘿,这两个转换需求在BigQuery里都挺常见的,我来给你一步步讲清楚怎么实现:
1. 将字符串类型转换为Datetime类型
BigQuery提供了PARSE_DATETIME函数来处理字符串到Datetime的转换,核心是匹配你的字符串格式指定对应的格式符。
比如如果你的字符串是'2024-05-20 14:30:00'这种标准的年-月-日 时:分:秒格式,直接用%Y-%m-%d %H:%M:%S作为格式参数即可:
SELECT PARSE_DATETIME('%Y-%m-%d %H:%M:%S', '2024-05-20 14:30:00') AS converted_datetime;
如果你的字符串格式是其他样式,只需要调整格式符就行:
- 处理仅日期的字符串:
SELECT PARSE_DATETIME('%Y/%m/%d', '2024/05/20') AS date_only_datetime;
- 处理年月格式的字符串:
SELECT PARSE_DATETIME('%Y-%m', '2024-05') AS year_month_datetime;
注意:Datetime类型是不带时区的本地时间,如果你的字符串包含时区信息,建议先转成Timestamp类型,再按需转Datetime。
2. 将yyyymmdd格式的INT64类型转换为TIMESTAMP类型
对于yyyymmdd格式的整数(比如20240520),最简洁的方式是先把整数转成字符串,再用PARSE_TIMESTAMP函数解析:
SELECT PARSE_TIMESTAMP('%Y%m%d', CAST(20240520 AS STRING)) AS converted_timestamp;
如果需要指定时区(比如默认是UTC,你要转成东八区),可以在函数里加上时区参数:
SELECT PARSE_TIMESTAMP('%Y%m%d', CAST(20240520 AS STRING), 'Asia/Shanghai') AS cst_timestamp;
另外,如果你想通过拆分整数的方式实现(虽然没必要,但可以作为思路参考),可以用数值运算提取年、月、日,再转成日期后转Timestamp:
SELECT TIMESTAMP( DATE( CAST(20240520 / 10000 AS INT64), -- 提取年份2024 CAST((20240520 % 10000)/100 AS INT64), -- 提取月份05 CAST(20240520 % 100 AS INT64) -- 提取日期20 ) ) AS converted_timestamp;
这种方式更繁琐,但适合理解底层逻辑。
内容的提问来源于stack exchange,提问作者Nazrin Guliyeva
相关产品推荐
相关产品推荐

