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

如何在BigQuery中正确解析JSON字符串内的datetime数据

问题根源

传入的JSON字符串不符合标准JSON语法规范:JSON中除数值、布尔值、null类型外,其余字符串类型的值必须用双引号包裹。当前示例里application_date对应的日期时间值2020-08-03 12:55:21没有加双引号,解析器默认尝试将冒号后的内容解析为数值,读到2020后遇到后续的-不属于合法数值字符,判定数值内容终止,因此最终只返回2020。

修复方案

方案1:修正源JSON格式(优先推荐)

构造JSON时给datetime类型的值加上双引号,使其成为合法的JSON字符串,再使用json_extract_scalar提取即可得到完整值,示例代码:

select json_extract_scalar(json_data, '$.application_date') as application_date
from (
  select '{"user_id":"10000561","application_date":"2020-08-03 12:55:21"}' as json_data
)

如果需要得到BigQuery原生的DATETIME类型值方便后续日期计算,可以在提取后加一层类型转换:

select datetime(json_extract_scalar(json_data, '$.application_date')) as application_date
from (
  select '{"user_id":"10000561","application_date":"2020-08-03 12:55:21"}' as json_data
)

方案2:无法修改源JSON时的兼容方案

如果上游生成的JSON固定为不带引号的错误格式、无法调整源数据,可以跳过JSON解析逻辑,用正则直接提取对应字段的值:

select regexp_extract(json_data, r'"application_date":([0-9\-: ]+)') as application_date
from (
  select '{"user_id":"10000561","application_date":2020-08-03 12:55:21}' as json_data
)

注意:该兼容方案仅适用于日期时间格式固定、JSON结构无大幅变动的场景,正则匹配存在失效风险,优先选择修正JSON格式的方案。


内容的提问来源于stack exchange,提问作者DreamingFighter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 11:33:21