在BigQuery中将字符串列转换为仅含时分秒的Interval类型
解决字符串转Interval并仅保留时分秒的问题
方案1:生成仅含时分秒的Interval类型列
无需重复删除重建列,直接提取原字符串中的时分秒部分转换为Interval即可。针对不同的原字符串格式,提供两种处理方式:
情况1:原字符串含日期+时分秒(如X days HH:MM:SS)或直接为HH:MM:SS
-- 1. 重命名原列以便后续处理 ALTER TABLE `scenic-arc-373908.Cyclistic_Data.04_2022` RENAME COLUMN ride_length TO ride_length_to_dump; -- 2. 添加新的Interval类型列 ALTER TABLE `scenic-arc-373908.Cyclistic_Data.04_2022` ADD COLUMN ride_length INTERVAL; -- 3. 提取时分秒片段并转换为Interval UPDATE `scenic-arc-373908.Cyclistic_Data.04_2022` SET ride_length = CAST( REGEXP_EXTRACT(ride_length_to_dump, r'(\d+:\d+:\d+)') AS INTERVAL) WHERE ride_length_to_dump IS NOT NULL;
情况2:原字符串为总秒数(如900代表15分钟)
UPDATE `scenic-arc-373908.Cyclistic_Data.04_2022` SET ride_length = MAKE_INTERVAL(SECOND => CAST(ride_length_to_dump AS INT64)) WHERE ride_length_to_dump IS NOT NULL;
方案2:转换为HH:MM:SS格式的字符串列(更适配Tableau可视化)
如果Tableau对字符串格式的时分秒支持更友好,可直接生成纯时分秒字符串:
-- 1. 重命名原列 ALTER TABLE `scenic-arc-373908.Cyclistic_Data.04_2022` RENAME COLUMN ride_length TO ride_length_to_dump; -- 2. 添加字符串类型列 ALTER TABLE `scenic-arc-373908.Cyclistic_Data.04_2022` ADD COLUMN ride_length STRING; -- 3. 格式化为时分秒字符串 UPDATE `scenic-arc-373908.Cyclistic_Data.04_2022` SET ride_length = FORMAT_TIMESTAMP( "%H:%M:%S", TIMESTAMP_ADD(TIMESTAMP("1970-01-01"), INTERVAL ride_length_to_dump SECOND) ) WHERE ride_length_to_dump IS NOT NULL;
Tableau端补充设置(针对Interval类型列)
若选择保留Interval类型,在Tableau中连接数据集后:
- 选中
ride_length列,右键点击「默认属性」→「数字格式」 - 自定义格式为
HH:mm:ss,即可在可视化中仅显示时分秒部分
内容的提问来源于stack exchange,提问作者atziri
相关产品推荐
相关产品推荐

