正则表达式修剪字符串 sql 的部分
Posted
技术标签:
【中文标题】正则表达式修剪字符串 sql 的部分【英文标题】:regex trim the part of the string sql 【发布时间】:2020-08-24 17:31:04 【问题描述】:我的数据保存在 Big Query 中。有一列需要 REGEX 提取。字符串示例如下:
?src=abb_fh_uit*_source=h&_medium=cpm&my_campaign=abb_hc_hr
src=abb_fh_uit*_source=h&_medium=cpm&my_campaign=goal_healthcare
?src=abb_fh_uit*_source=h&_medium=cpm&my_campaign=goal_hr
?src=abb_fh_uit*_source=h&_medium=cpm&my_campaign=abb_hr_healthcare
我想要的输出是这样的:
my_campaign=goal
my_campaign=goal
基本上我需要修剪除my_campaign=goal
之外的所有内容
我写的代码是用 SQL 写的,如下:
LOWER(REGEXP_EXTRACT(my_column,r'my_campaign=([^&])')) AS my_campaign
它使用 my_campaign my_campaign=abb_hc_hr, my_campaign=goal_healthcare
等返回所有内容。我应该如何更改现有代码以获取 my_campaign=goal?
谢谢。
【问题讨论】:
如果您只需要其中包含“campaign=goal”的行,为什么不直接使用select *, 'my_campaign=goal' as my_column from t where my_column like '%my_campaign=goal%'
【参考方案1】:
以下是 BigQuery 标准 SQL
你应该在下面使用
SELECT
LOWER(REGEXP_EXTRACT(my_column,r'(my_campaign=[^&]*)&?')) AS my_campaign
FROM your_table
WHERE LOWER(my_column) LIKE '%my_campaign=goal_%'
如果应用于您问题的样本数据 - 输出是
Row my_campaign
1 my_campaign=goal_healthcare
2 my_campaign=goal_hr
【讨论】:
但是我将如何修剪以仅返回my_campaign=goal
?
只需添加 WHERE LOWER(my_column) LIKE '%my_campaign=goal%'
- 查看更新的答案以上是关于正则表达式修剪字符串 sql 的部分的主要内容,如果未能解决你的问题,请参考以下文章