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 ))
我想隔离一些具有特定标题的电子邮件。我可以在 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 ))