我需要帮助来提取以下字符串。我尝试了很多解决方案,但这是最接近的。但仍然不是我所需要的。任何帮助表示赞赏。
示例网址:'https://mywebsite/path/?utm_source=google&utm_medium=cpc&gclid=123abc'
要求的结果:
utm_source | utm_medium | gclid |
---|---|---|
谷歌 | 每次点击费用 | 123abc |
以下 gclid 示例为我提供了 gclid=123abc 结果,而我需要提取 123abc
SELECT l.url, REGEXP_SUBSTR(l.url, 'gclid=([^&]*)') as data
FROM mydatabase.mytable AS l
WHERE Date(l.registration_date) >= '2021-06-15'
AND REGEXP_SUBSTR(l.url, 'gclid=([^&]*)') is not null
我还需要解析另外两个字段,如 utm_source 和 utm_medium。
答案 0 :(得分:2)
SET @URL := 'https://mywebsite/path/?utm_source=google&utm_medium=cpc&gclid=12345';
<块引用>
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(@URL, 'utm_source=', -1), '&', 1) utm_source,
SUBSTRING_INDEX(SUBSTRING_INDEX(@URL, 'utm_medium=', -1), '&', 1) utm_medium,
SUBSTRING_INDEX(SUBSTRING_INDEX(@URL, 'gclid=', -1), '&', 1) gclid;
utm_source | utm_medium | gclid |
---|---|---|
每次点击费用 | 12345 |
db<>fiddle here
答案 1 :(得分:1)
您可以在此处使用lookbehinds从您的匹配项中排除静态文本:
REGEXP_SUBSTR(l.url, '(?<=[?&]gclid=)[^&#]+')
REGEXP_SUBSTR(l.url, '(?<=[?&]utm_source=)[^&#]+')
REGEXP_SUBSTR(l.url, '(?<=[?&]utm_medium=)[^&#]+')
看到一个 sample regex demo。
详情:
(?<=[?&]gclid=)
- 匹配紧跟在 ?
或 &
之前的位置(这确保我们只匹配完整的查询参数键)然后 {{1 }}gclid=
- 除 [^&#]+
和 &
之外的一个或多个字符(使用并作为匹配值返回)。