如何在BigQuery中实现带通配符的字符串列表匹配及case when应用
BigQuery 等效SQL实现方案
你原来的写法无法运行是因为IN运算符仅支持精确等值匹配,无法识别%通配符(通配符是LIKE运算符的专属语法),该需求在BigQuery中可以正常实现,以下是两种常用写法:
方案1:使用REGEXP_CONTAINS(多匹配项时更简洁)
该方案通过正则匹配实现包含任意关键词的判断,适配你的需求场景:
- WHERE 条件写法:
SELECT * FROM `你的表名` WHERE REGEXP_CONTAINS(LOWER(field1), r'foo|bar|baz')
- CASE WHEN 子句写法:
SELECT *, CASE WHEN REGEXP_CONTAINS(LOWER(field1), r'foo|bar') THEN 'string1' ELSE 'string2' END AS NewField FROM `你的表名`
注意:如果匹配关键词本身包含正则特殊字符(如
.、*、|等),需要对特殊字符做转义处理。
方案2:使用LIKE搭配OR(无正则语法学习成本)
如果你更熟悉传统LIKE语法,也可以用多条件拼接实现:
- WHERE 条件写法:
SELECT * FROM `你的表名` WHERE LOWER(field1) LIKE '%foo%' OR LOWER(field1) LIKE '%bar%' OR LOWER(field1) LIKE '%baz%'
- CASE WHEN 子句写法:
SELECT *, CASE WHEN LOWER(field1) LIKE '%foo%' OR LOWER(field1) LIKE '%bar%' THEN 'string1' ELSE 'string2' END AS NewField FROM `你的表名`
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

