BigQuery中UPPER函数与NOT IN无法正确过滤结果问题排查
问题分析与解决
你的查询逻辑存在大小写不匹配的问题:
- 你对
fieldId使用了UPPER()函数转成大写,但IN子句里的是原大小写的'Debit'、'Unknown'、'Credit'。 - 转成大写后的字段值(比如
'DEBIT')和IN里的字符串完全不匹配,所以所有记录都被判定为“不在列表中”,最终返回了全部三个有效值。
修正后的查询方案
方案一:将IN子句中的字符串也转为大写
SELECT fieldId as outlier FROM datasetId.tableId WHERE UPPER(fieldId) NOT IN ('DEBIT', 'UNKNOWN', 'CREDIT');
方案二:去掉UPPER函数(如果fieldId字段值大小写统一)
如果你的fieldId字段值本身就是严格的'Debit'、'Unknown'、'Credit'格式,没有大小写混乱,可以直接去掉UPPER():
SELECT fieldId as outlier FROM datasetId.tableId WHERE fieldId NOT IN ('Debit', 'Unknown', 'Credit');
额外建议:检查字段是否存在空格或特殊字符
如果修正后仍有异常,建议检查fieldId字段是否存在前后空格或不可见特殊字符,可以用TRIM()函数辅助排查:
SELECT fieldId as outlier, TRIM(fieldId) as trimmed_field FROM datasetId.tableId WHERE TRIM(UPPER(fieldId)) NOT IN ('DEBIT', 'UNKNOWN', 'CREDIT');
内容的提问来源于stack exchange,提问作者user1866627
相关产品推荐
相关产品推荐

