Redshift - извлечение значения, соответствующего условию в массиве - PullRequest
0 голосов
/ 27 августа 2018

У меня есть таблица Redshift со следующим столбцом table

Как мне извлечь значение, начинающееся с cat_ из этого столбца, пожалуйста (есть только одно значение для каждой строки и в другой позиции в массиве)?

Я хочу получить такие результаты:

cat_incident

cat_feature_missing

cat_duplicated_request

Спасибо!

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Вы можете сделать это, используя таблицу подсчета (таблица с числами). Проверьте эту ссылку на информацию, как создать эту таблицу: http://www.sqlservercentral.com/articles/T-SQL/62867/

Вот пример, как бы вы его использовали. В реальной жизни вы должны заменить временную таблицу #tally на постоянную.

--create sample table with data
create table #a (tags varchar(500));

insert into #a
select 'blah,cat_incident,mcr_close_ticket'
union
select 'blah-blah,cat_feature_missing,cat_duplicated_request';

--create tally table
create table #tally(n int);
insert into #tally
select 1
union select 2
union select 3
union select 4
union select 5
;

--get tags
select * from
(
select TRIM(SPLIT_PART(a.tags, ',', t.n)) AS single_tag
from #tally t
inner join #a a ON t.n <= REGEXP_COUNT(a.tags, ',') + 1 and n<1000
)
where single_tag like 'cat%'
;
0 голосов
/ 28 августа 2018

Спасибо! В конце концов мне удалось сделать это с помощью следующего запроса:

SELECT SUBSTRING (SUBSTRING (теги, charindex ('cat_', теги), len (теги)), 0, charindex (',', SUBSTRING (теги, charindex ('cat_', теги), len (теги) ))) теги ОТ стола

0 голосов
/ 28 августа 2018

Существует простой способ извлечь несколько значений из одного столбца в SQL (или, по крайней мере, не в SQL, используемом Redshift).

Вы можете написать Определяемую пользователем функцию (UDF) , которая возвращает строку, содержащую эти значения, разделенные символами новой строки. Приемлемо ли это, зависит от того, что вы хотите сделать с выводом (например, JOIN против него).

Другой вариант - предварительно обработать данные до их загрузки в Redshift , чтобы поместить эту информацию в отдельную таблицу один-ко-многим с каждым значением в своем собственном ряду. Тогда было бы тривиально вернуть эту информацию.

...