Отображение только различных совпадений регулярных выражений в PostgreSQL - PullRequest
1 голос
/ 19 октября 2019

Я пытаюсь написать функцию для анализа хештегов из строки и хочу, чтобы каждый уникальный хештег отображался только один раз.

Я использую функцию postgres regexp_matches и пробовал различные комбинации шаблонов, чтобы она показывала только один экземпляр каждого уникального хэштега без особой удачи.

Скажите, у меня есть строка, которая выглядит примерно так:

this has #abc and also #def and another #abc and even an #bc

В настоящее время я использую функцию:

REGEXP_MATCHES(mystring, '(#[A-Za-z0-9_]+)', 'g')

, которая возвращает

#abc
#def
#abc
#bc

Как я могу изменить свою функцию, чтобы она возвращала только уникальные / уникальные совпадения, и я получил набор, который выглядит следующим образом?

#abc
#def
#bc

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

Вы можете использовать distinct. Нет необходимости использовать подзапрос:

SELECT DISTINCT match FROM REGEXP_MATCHES(mystring, 'g') t(match)

Демонстрация на DB Fiddle :

SELECT DISTINCT match 
FROM REGEXP_MATCHES(
    'this has #abc and also #def and another #abc and even an #bc', '(#[A-Za-z0-9_]+)', 
    'g'
) t(match)
| match  |
| :----- |
| {#bc}  |
| {#def} |
| {#abc} |
0 голосов
/ 19 октября 2019
SELECT DISTINCT 
    q.hash
FROM (
    SELECT 
        REGEXP_MATCHES(mystring, '(#[A-Za-z0-9_]+)', 'g') AS hash
    FROM mytable
) q
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...