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

BigQuery报错:字符串含非法非空格尾随数据'1'问题求助

解决BigQuery中PARSE_DATE解析带时间字符串的报错问题

错误原因分析

你遇到的报错Error: Illegal non-space trailing data '1' in string "2018-04-22 17:00:00",核心问题是**PARSE_DATE('%Y-%m-%d')只接受纯日期格式的字符串**(比如YYYY-MM-DD),但你的TS_Estimated_Dispatch字段实际存储的是带时间部分的字符串(YYYY-MM-DD HH:MM:SS),多余的时间部分超出了指定的解析格式,导致解析失败。

解决方案

根据你的需求,这里有几种可靠的解决方式:

1. 直接解析完整的日期时间字符串(推荐)

既然字段里包含日期和时间,直接用PARSE_TIMESTAMP解析完整格式,不需要先转DATE再转TIMESTAMP:

SELECT Order_Number 
FROM `MYTABLE` 
WHERE Customer_Country = 'ABC' 
  AND Partner_Country = 'DEF' 
  AND SO_Item_Status IN (1,2,3) 
  AND PARSE_TIMESTAMP('%Y-%m-%d %H:%M:%S', TS_Estimated_Dispatch) > '2018-04-20'

BigQuery会自动将字符串'2018-04-20'转换为TIMESTAMP类型进行比较,结果符合预期。

2. 兼容多种格式,避免查询失败

如果字段中存在部分纯日期(无时间)的记录,可以用SAFE_PARSE_TIMESTAMP替代,解析失败时返回NULL,不会导致整个查询中断:

SELECT Order_Number 
FROM `MYTABLE` 
WHERE Customer_Country = 'ABC' 
  AND Partner_Country = 'DEF' 
  AND SO_Item_Status IN (1,2,3) 
  AND SAFE_PARSE_TIMESTAMP('%Y-%m-%d %H:%M:%S', TS_Estimated_Dispatch) > '2018-04-20'

3. 仅提取日期部分进行比较

如果你的需求只关心日期(不考虑时间),可以先解析为TIMESTAMP再提取DATE:

SELECT Order_Number 
FROM `MYTABLE` 
WHERE Customer_Country = 'ABC' 
  AND Partner_Country = 'DEF' 
  AND SO_Item_Status IN (1,2,3) 
  AND DATE(SAFE_PARSE_TIMESTAMP('%Y-%m-%d %H:%M:%S', TS_Estimated_Dispatch)) > '2018-04-20'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:01:43