#sql #regex #amazon-web-services #amazon-redshift
Вопрос:
Я хотел бы извлечь идентификатор (номер) из множества URL-адресов в красном смещении. Я знаю, что могу использовать regexp_substr
для этой цели, но мои знания регулярных выражений слабы. Вот несколько примеров URL-адресов:
/checkout?feature=ADVANCED_SEARCHamp;upgradeRedirect=/mentions?top_ids=1222874068amp;btv=feature_ADVANCED_SEARCH /checkout?feature=ADVANCED_SEARCHamp;trigger=mentioning-author-rwamp;upgradeRedirect=/mentions?top_ids=160447990
После анализа приведенных выше URL-адресов я хотел бы, чтобы вывод был:
1222874068 160447990
Обратите внимание, что параметр top_ids
остается постоянным и поможет разбить URL-адрес. Я также пробовал использовать несколько версий split_part
. Но в URL-адресе могут быть изменения, из-за которых он может сломаться. Поэтому использование регулярного выражения может быть лучшей идеей.
Любая помощь будет очень признательна.
Ответ №1:
Вы можете использовать:
select regexp_substr(column,'top_ids=([0-9]*)', 1, 1, 'e')
'e'
Извлекает подстроку в (скобках).
Ответ №2:
Попробуйте что-нибудь вроде этого:
SUBSTR(REGEXP_SUBSTR(yourcolumn, 'top_ids=([0-9]{2,})'), 11, 20)
Просто ищу «top_ids=» и 2 или более цифр после него.
Затем удаляет первые 10 символов.