如何在 PostgreSQL 中提取 URL 的一部分

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

我试图在查询中仅提取字符串 URL 字段的特定部分。查询很简单,本质上

SELECT email_id, url
FROM emailsends
WHERE date > '01-01-2023'

总体来说非常简单。在 URL 中,每个结构基本上都是这样的:

https://www.example.com/489r9759t9t897987&utm_source=summer-mailer&utm_medium=email&utm_campaign=summer-sale

我想要从 URL 中提取 utm_source 和 utm_campaign。我希望它们成为自己的字段,所以我的输出将是这样的:

电子邮件_id 网址 utm_来源 utm_campaign
1234 google.com/dmecm 夏季邮件 夏季促销

有没有一种简单的方法可以在查询中执行此操作?使用文本位置的子字符串实际上不起作用,因为所有 URL 的长度都不同。例如,我需要以 &utm_source 开头,并在下一个 & utm_medium 开始的位置之后结束。我只是不确定如何正确提取和解析。

我尝试过使用 Substring 函数和不同类型的 REGEX,即 REGEX_SUBSTR。我正在使用 DBVisualizer,这可能有点限制。我想做这种简单的事情,而不必创建临时表或其他东西。

regex postgresql parsing substring dbvisualizer
1个回答
0
投票

在 MySQL 8.x 中,您可以使用

REGEXP_SUBSTR()
获取整个参数,然后使用
SUBSTRING_INDEX()
提取
=
之后的部分。

SUBSTRING_INDEX(REGEXP_SUBSTR(url, 'utm_source=[^&]+'), '=', -1)
© www.soinside.com 2019 - 2024. All rights reserved.