BigQuery 查询使用多个 "likes" 但不使用 "in"

BigQuery Query working with multiple "likes" but not working with "in"

我想隔离一些具有特定标题的电子邮件。我可以在 where 子句中使用与 OR 连接的多个 "like"。这给了我一些结果。但是,如果我尝试在('____'、'____' 等)中执行 ____,代码突然 returns 什么都没有。

这不起作用。

select DATE_TRUNC(DATE(send_time,"America/Los_Angeles"), week(monday)) as week,
status, 
settings_title,
sum(emails_sent) as emails_sent,
sum(report_summary_opens) as report_summary_opens, 
sum(report_summary_unique_opens) as report_summary_unique_opens, 
sum(report_summary_subscriber_clicks) as report_summary_subscriber_clicks
from mailchimp.campaigns_view
where status = 'sent' 
and settings_title in ('%_LL_%', '%_IC_%', '%_AC_%', '%_CC_%', '%_PC_%')
group by 1,2,3
order by 1 desc

但是,这有效。

select DATE_TRUNC(DATE(send_time,"America/Los_Angeles"), week(monday)) as week,
status, 
settings_title,
sum(emails_sent) as emails_sent,
sum(report_summary_opens) as report_summary_opens, 
sum(report_summary_unique_opens) as report_summary_unique_opens, 
sum(report_summary_subscriber_clicks) as report_summary_subscriber_clicks
from mailchimp.campaigns_view
where status = 'sent' 
and (settings_title like '%_LL_%'
or settings_title like '%_IC_%'
or settings_title like '%_AC_%'
or settings_title like '%_CC_%'
or settings_title like '%_PC_%')
group by 1,2,3
order by 1 desc

我已经尝试在我的 "from" 中包含一个子查询来消除所有空值 settings_title。任何想法为什么这不起作用?我是否遗漏了一些小的语法错误?

感谢您的帮助!

% 符号仅适用于 LIKE。对于 IN 这只是平等。也试试 REGEXP_CONTAINS

如:

SELECT REGEXP_CONTAINS("abcdefg", '(xxx|zzz|yyy|cd)')

谢谢 Felipe,很有用!!!在我的例子中,我使用 REGEXP_CONTAINS 来匹配添加到 table 的多个模式。位于第二个位置的带有“pattern_str”列的 select 能够正确搜索并找到 parttern 的每个部分: WITH CTE_PatternCovid 作为( SelectSTRING_AGG(Pattern,'|') 作为来自 xxxxxxxxx.TEMP.Temp_patternsearch_covid 的 strPattern ) --这将多个模式转换为一行: --.*MASK.FFP.|.*MASK.KN.|.*TEST.ANTIG.|.*MASK.QUI.|.*SP.*H.DRO.AL. --然后这样使用: Select 来自 xxxxxxxxx.TEMP.Table_ProductsName_covid 的产品名称 在哪里 regexp_contains (upper(ProductName),(SELECT strPattern FROM CTE_PatternCovid ))