使用 SQL 中的条件从另一列创建列

问题描述 投票:0回答:1

我的数据库中有一个列包含campaign_name,国家/地区代码出现在名称中,我希望能够提取它们并将它们转换为正常名称,并创建一个名为国家/地区名称的新列,其中包含国家/地区来自每个活动。 这是代码片段:

WHEN LOWER(cmp.campaign_name) LIKE '%canada%' THEN 'Canada'
WHEN LOWER(cmp.campaign_name) LIKE '%uk%' THEN 'United Kingdom'
WHEN (cmp.campaign_name) LIKE '%US%' THEN 'United States'
ELSE 'other'
END AS country_name.

这是活动名称“campaign_UK-US_receiver”的示例 此代码的问题在于,与大多数编程语言中的 for 循环不同,我可以创建一个国家/地区列表并检查与列表中相同的单词的第一次出现,然后返回相关代码的国家/地区名称。使用 SQL 的问题是,基于第一个针对加拿大的语句,如果 SQL 迭代的第一行是加拿大,那么它会得到正确的结果,但如果它位于针对英国的下一个语句上。如果它看到像“campaign_Canada_UK_receiver”这样的广告系列名称,而不是选择加拿大作为第一个出现的国家/地区,它会选择英国,因为它已经执行了加拿大。

sql google-bigquery
1个回答
0
投票

根据@Josh,此正则表达式模式可以是一种解决方法:

CASE 
WHEN LOWER(REGEXP_EXTRACT(your_column, r'(uk|canada|us)'))

您也可以访问此案例进行代表。

此外,@ekimebg 提到使用的解决方法是 SPLIT() 与 OFFSET 函数的组合。

请随意编辑此社区 wiki 并提供确切的解决方法和经过编辑的机密信息,以造福于将来可能遇到此用例的社区。

© www.soinside.com 2019 - 2024. All rights reserved.