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

BigQuery中FORMAT()内调用PARSE_DATE报错:无效格式说明符字符“Y”

解决BigQuery FORMAT函数中PARSE_DATE百分号冲突的问题

首先,问题的核心是BigQuery的FORMAT()函数会把单个百分号%识别为格式占位符的起始标记,你在PARSE_DATE里用的%Y%m%d中的%Y会被FORMAT误判为格式说明符,这才导致了"Invalid format specifier character 'Y'"的错误。

正确的解决方法:用双重百分号%%转义

在FORMAT的字符串模板里,如果你需要输出字面意义的百分号,必须用两个百分号%%来代替单个%。这样FORMAT函数就会把%%Y解析为字面的%Y,而不是格式占位符。

修改后的完整查询语句如下:

FOR TABLE IN ( SELECT tables FROM project.dataset.table) DO
EXECUTE IMMEDIATE FORMAT("""
 SELECT PARSE_DATE('%%Y%%m%%d', event_date) event_timestamp, event_name, user_pseudo_id, user_first_touch_timestamp, device.category, device.mobile_brand_name, device.mobile_model_name, device.web_info.hostname, geo.country, geo.city, traffic_source.name, traffic_source.medium, traffic_source.source
 FROM %s""", TABLE.tables);
END FOR;

为什么之前的转义尝试没生效?

你提到尝试过转义百分号和原始字符串,但可能用了错误的转义方式:

  • BigQuery的FORMAT函数不支持用反斜杠\转义百分号,它只认双重百分号%%作为转义规则;
  • 其他语言里的"原始字符串"语法(比如前缀r)在BigQuery的字符串体系里不生效,BigQuery的字符串转义规则中,百分号的转义只能通过%%实现。

这样修改后,FORMAT生成的SQL语句里,PARSE_DATE的参数就会是正确的'%Y%m%d',不会再触发格式说明符的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:14:06