You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在BigQuery中转换字符串为无时区且保留3位毫秒的Timestamp

解决方案:字符串时间转Timestamp并保留原格式显示

一、存储层面:准确转换为Timestamp类型

BigQuery中的TIMESTAMP类型默认基于UTC时区,针对你带3位毫秒的无时区字符串时间,推荐用PARSE_TIMESTAMP自定义格式解析,避免自动补全毫秒或添加冗余信息:

SELECT 
  createddate,
  PARSE_TIMESTAMP("%Y-%m-%d %H:%M:%E3S", createddate) AS converted_timestamp
FROM `hd-dev.mm.jira_backlog`

这里%E3S专门匹配3位毫秒格式,能精准对应原字符串的时间结构。

如果要将转换后的数据写入新的TIMESTAMP列,执行以下操作:

-- 新增TIMESTAMP类型列
ALTER TABLE `hd-dev.mm.jira_backlog` ADD COLUMN created_timestamp TIMESTAMP;

-- 批量更新数据
UPDATE `hd-dev.mm.jira_backlog`
SET created_timestamp = PARSE_TIMESTAMP("%Y-%m-%d %H:%M:%E3S", createddate)
WHERE createddate IS NOT NULL;

二、查询显示层面:格式化Timestamp为原字符串样式

如果只是查询时需要输出和原字符串一致的格式(无T分隔符、无时区、保留3位毫秒),用FORMAT_TIMESTAMP函数格式化结果即可:

SELECT 
  createddate,
  FORMAT_TIMESTAMP("%Y-%m-%d %H:%M:%E3S", PARSE_TIMESTAMP("%Y-%m-%d %H:%M:%E3S", createddate)) AS formatted_timestamp
FROM `hd-dev.mm.jira_backlog`

输出结果会完全匹配原字符串的样式,同时底层存储的是标准TIMESTAMP类型。

补充说明

  • TIMESTAMP()和DATETIME()函数会产生冗余格式,是因为它们默认使用BigQuery标准解析规则,自动补全毫秒到6位、添加时区或T分隔符;而PARSE_TIMESTAMP支持自定义格式,更适配你的场景。
  • 若原字符串是基于特定时区(如北京时间),转换时可指定时区参数:
PARSE_TIMESTAMP("%Y-%m-%d %H:%M:%E3S", createddate, "Asia/Shanghai")

内容的提问来源于stack exchange,提问作者gcpdev-guy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:03:15