查询以删除列中字符串的第一个和第二个hypen之间的所有内容



我正在尝试检索基于自定义字段的记录">ci_ku";。对于相同的">ci_ku";我们将有多个">l1m_访问";,并且我想要检索"0"的最小值l1mvists";对于每个">ci_ku";。我想通过删除ku中第一个和第二个下划线(-(之间的字符串来获得

ci_ku样本数据

>ABD
kuiteml1m-visions
1234-5678-HIJK1234
1234-9012-HIJK1234
56457-12456-DF-GH-TC56457

我将使用正则表达式替换来处理ci_ku需求。请注意,这种替换应该首先发生,因为对ROW_NUMBER的调用取决于它。

WITH tab_with_ci_ku AS (
SELECT *, REGEXP_REPLACE(ku, '([^-]+)-[^-]+-(.*)', '$1-$2') AS ci_ku
FROM db.schema.table
),
ranked_visits AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY ci_ku ORDER BY l1m_visits) AS rn
FROM tab_with_ci_ku
)
SELECT ku, ci_ku, l1m_visits
FROM ranked_visits
WHERE rn = 1;

以下是正则表达式的解释:

  • ([^-]+)$1中匹配并捕获第一项
  • -匹配文字连字符
  • [^-]+与第二项匹配(在替换中排除(
  • -匹配文字连字符
  • (.*)匹配并在$2中捕获SKU的剩余部分

然后我们用$1-$2替换,以有效地拼接出第二项。

最新更新