BigQuery - 将正则表达式与 LIKE 运算符 (?) 结合使用
Posted
技术标签:
【中文标题】BigQuery - 将正则表达式与 LIKE 运算符 (?) 结合使用【英文标题】:BigQuery - Using regexp with LIKE operator (?) 【发布时间】:2021-07-15 10:06:41 【问题描述】:我想从 url 获取 productids,我几乎已经微调了一个查询来做到这一点,但仍然有一个我无法解决的问题。 网址通常如下所示:
/xp-pen/toll-spe43-deco-pro-small-medium-spe43-tobuy-p665088831/
或
/harry-potter-es-a-tuz-serlege-2019-m19247107/
如您所见,有两种类型的 id:
一般来说,id 以“-p”开头 一些特殊产品的id以'-m'开头我在声明时创建了这个案例:
CASE
WHEN MAX(hits.page.pagePath) LIKE '%-p%'
THEN MAX(REGEXP_REPLACE(REGEXP_EXTRACT(
hits.page.pagePath, '-p[0-9]+/'), '\\-|p|/', ''))
WHEN MAX(hits.page.pagePath) LIKE '%-m%'
THEN MAX(REGEXP_REPLACE(REGEXP_EXTRACT(
hits.page.pagePath, '-m[0-9]+/'), '\\-|m|/', ''))
ELSE NULL
END AS productId
乍一看有点复杂,但我真的需要一个 regexp_replace 和一个 regexp_extract 因为“-p”或“-m”字符不仅出现在 id 之前,而且可以在 url 中乘以。
我的代码的问题是,当 url 看起来像这样时,有一些特殊情况:
/elveszett-profeciak-2019-m17855487/
如您所见,id 以“-m”开头,但 url 也包含“-p”。在这种情况下,查询中的结果是空值。 我认为可以通过在 case when 语句的 when 部分修改 like 运算符来解决:LIKE '%-p%' 或 LIKE '%-m%' 在 LIKE 运算符之后或代替 LIKE 运算符后有一个正则表达式表达式会很棒。类似于我在 regexp_extract 函数中使用的 '-p[0-9]+/' 的参数。
所以我需要在语句的 when 部分定义如果 '-p' 或 '-m' 文本后跟 url 中的数字
我不确定在 BQ 中是否可以这样做。
【问题讨论】:
【参考方案1】:所以我需要在语句的 when 部分定义如果 '-p' 或 '-m' 文本后跟 url 中的数字
我想你想要 '-p'
和 '-m'
后跟数字。如果是这样,我认为这可以满足您的要求:
select regexp_extract(url, '-[pm][0-9]+')
from (select '/xp-pen/toll-spe43-deco-pro-small-medium-spe43-tobuy-p665088831/' as url union all
select '/elveszett-profeciak-2019-m17855487/' union all
select '/harry-potter-es-a-tuz-serlege-2019-m19247107/'
) x
【讨论】:
非常感谢!我改用了 regexp_contains 但你描述的 regexp 参数非常有用以上是关于BigQuery - 将正则表达式与 LIKE 运算符 (?) 结合使用的主要内容,如果未能解决你的问题,请参考以下文章
正则 及 oracle 判断字段是否为是数字 regexp_like用法 正则表达式
oracle 判断字段是否为是数字 regexp like用法 正则表达式