正则表达式修剪字符串 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 的部分的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 使用正则表达式修剪字符串空格

使用正则表达式修剪字符串空格

如何从正则表达式捕获组中修剪空白?

在字符串中匹配两个正则表达式

Java:在正则表达式查询中使用占位符

正则表达式修剪空白