Совпадение последовательных цифр REGEXP_REPLACE в Redshift - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь удалить последовательные числа из строки в Redshift.

От '16,16,16,3,3,4,16,16,' Я хочу получить '16,3,4,16,'.

Следующая конструкция не работает для меня:

SELECT regexp_replace('16,16,16,3,3,4,16,16,', '(.+)\1{1,}', '\1');

Он возвращает точно такую ​​же строку. (

Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Вот, пожалуйста. ?

SELECT regexp_replace('16,16,16,3,3,4,16,16,', '([0-9]+,){2}', '$1') ;

 regexp_replace
----------------
 16,3,4,16,
0 голосов
/ 08 января 2019

Вот ответ с использованием UDF на Redshift Python.

create or replace function dedupstring(InputStr varChar)
  returns varchar
stable
as $$
    OutputStr=''
    PrevStr=''
    first=True
    for part in InputStr.split(','):
        if part <> PrevStr:
            if first:
                OutputStr+=part
            else:
                OutputStr+=','+part
            PrevStr=part
            first=False
    return OutputStr
$$ language plpythonu;

Select dedupstring('16,16,16,3,3,4,16,16,');

Возвращает '16, 3,4,16, '

...