我试图在查询中仅提取字符串 URL 字段的特定部分。查询很简单,本质上
SELECT email_id, url
FROM emailsends
WHERE date > '01-01-2023'
总体来说非常简单。在 URL 中,每个结构基本上都是这样的:
我想要从 URL 中提取 utm_source 和 utm_campaign。我希望它们成为自己的字段,所以我的输出将是这样的:
电子邮件_id | 网址 | utm_来源 | utm_campaign |
---|---|---|---|
1234 | google.com/dmecm | 夏季邮件 | 夏季促销 |
有没有一种简单的方法可以在查询中执行此操作?使用文本位置的子字符串实际上不起作用,因为所有 URL 的长度都不同。例如,我需要以 &utm_source 开头,并在下一个 & utm_medium 开始的位置之后结束。我只是不确定如何正确提取和解析。
我尝试过使用 Substring 函数和不同类型的 REGEX,即 REGEX_SUBSTR。我正在使用 DBVisualizer,这可能有点限制。我想做这种简单的事情,而不必创建临时表或其他东西。
在 MySQL 8.x 中,您可以使用
REGEXP_SUBSTR()
获取整个参数,然后使用 SUBSTRING_INDEX()
提取 =
之后的部分。
SUBSTRING_INDEX(REGEXP_SUBSTR(url, 'utm_source=[^&]+'), '=', -1)