Извлечение значений переменных из строки ссылки - PullRequest
0 голосов
/ 24 мая 2018

В столбце таблицы сохранены ссылки на веб-страницы в таком формате:

https://website.com/?variable1=aaa&variable2=222&variable3=ccc&variable4=dd44

Могут быть разные имена страниц, различное количество параметров и т. Д..

Моя цель - получить значение «variable2», которое равно «222».Мы можем предположить, что «variable2» всегда присутствует в ссылке.

До сих пор я сталкивался с такого рода решением, которое работает правильно, но выглядит недостаточно эффективно:

select
    substring(t.link, position('variable2=' in t.link)+10,
                position('&' in substring(t.link, position('variable2=' in t.link)+10))-1)
from
    (select
    'https://website.com/?variable1=aaa&variable2=222&variable3=ccc&variable4=dd44' as link
    )t;

Я считаю, что это можно сделать с помощью одной функции подстроки:

substring(string from pattern for escape)

До сих пор мне удавалось получить подстроку до последнего появления «&» с помощью этих двух разных подходов:

substring(t.link from '%variable2=#"%#"&%' for '#'),
substring(t.link from 'variable2=(.+)&')

оба они дают одинаковый результат: "222 & variable3 = ccc"

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

другое решение, использующее регулярное выражение:1010 *

regexp_matches возвращает массив, и мы хотим первое ( только ) совпадение.

индекс массива [1] выбирает первое совпадение.

Обновление:

Поскольку нас интересует первое совпадение, следующее утверждение также работает:

select substring(link from '(?<=variable2=)[^&]*')
from mytable
0 голосов
/ 24 мая 2018

Вы можете использовать подстроку для извлечения пары ключ / значение, затем используйте split_part() для извлечения значения с разделителями:

split_part(substring(link from 'variable2=[^&]+'), '=', 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...