Redshift SQL - выбрать часть строки - PullRequest
0 голосов
/ 05 мая 2020

Я хотел бы выделить часть строки в sql. Столбец содержит URL-адрес, и в URL-адресе всегда есть идентификатор, например:

submissionGuid=8bb76d2e-d940-4f81-8f99-5ddf80741a05

Идентификатор всегда равен 36 символам, и я хочу извлечь его из URL-адреса. В большинстве случаев это последняя часть URL-адреса, но иногда не во всех случаях. Если это не последняя часть URL-адреса, за ней следует &...

Я пробовал использовать функцию right(), но в некоторых случаях это не работает, потому что submissionGuid не последняя часть URL-адреса.

Ответы [ 3 ]

2 голосов
/ 05 мая 2020

Изначально вопрос был помечен только как Postgres. Это отвечает на исходный вопрос.

Вы можете использовать regexp_matches():

select (regexp_matches(str, 'submissionGuid=(.{32})'))[1]

Вы можете более подробно c о формате GUID, но 32 символа - хорошее место для начала.

0 голосов
/ 07 июля 2020

Регулярное выражение

Вы должны использовать выражение submissionGuid=([^&]*).

() - это группа захвата, которая захватывает строку, которую вы sh извлекаете.

[^&] - это класс отрицания, соответствующий любому символу, но '&'

* соответствует между нулем и неограниченно раз. Обработка заканчивается, когда достигается конец или встречается символ в классе отрицания, в данном случае это '&'.

Redshift SQL

SELECT REGEXP_SUBSTR(url, 'submissionGuid=([^&]*)', 0, 1, 'e')

Запрос извлекает группу захвата.

0 означает начало поиска с позиции 0.

1 означает поиск первого вхождения.

e означает для возврата подстроки.

Документация: REGEXP_SUBSTR

0 голосов
/ 05 мая 2020

Использовать функции Substring и charindex;

Declare @txt varchar(100)
Set @TXT = 'kjaskjdhfaskjhfkjhfaksjdhf&GUID=thisisa36charstring*****************&andcarryingon'

select substring(@TXT,charindex('Guid=',@TXT)+5,36)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...