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
相关产品推荐
相关产品推荐

