Redshift получает шаблоны слов из строки - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть строка в столбце 'ABC1, ABC2, WWW1, WWW2, ABC3, WWW3, WWW4, ABC4' Мне нужно извлечь слова, начинающиеся только с ABC. Ожидаемые результаты должны быть

ABC1, ABC2, ABC3, ABC4

Я пробовал ниже, но не работал

select regexp_substr(split_part('ABC1,ABC2,WWW1,WWW2,ABC3,WWW3,WWW4,ABC4',',',1),'ABC[^"]*')

Я получаю только Первое вхождение: какABC1. Как получить все вхождения ABC *

1 Ответ

1 голос
/ 30 сентября 2019

Вы получаете только одно совпадение, поскольку используемые вами функции (split_part, regexp_substr) возвращают n-й элемент совпадения.

Самый наивный подход для решения этого:

select regexp_substr(split_part('ABC1,ABC2,WWW1,WWW2,ABC3,WWW3,WWW4,ABC4',',',1),'ABC[^"]*')
union all
select regexp_substr(split_part('ABC1,ABC2,WWW1,WWW2,ABC3,WWW3,WWW4,ABC4',',',2),'ABC[^"]*')
union all
...
select regexp_substr(split_part('ABC1,ABC2,WWW1,WWW2,ABC3,WWW3,WWW4,ABC4',',',20),'ABC[^"]*')

Чтобы улучшить это, вам нужно сначала преобразовать значение с разделителями-запятыми в несколько строк, а затем использовать регулярное выражение. Это можно сделать различными способами, см. этот пост для получения более подробной информации.

Результат: ABC1 ABC2

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

...