Удалить повторяющиеся одновременные символы в ORACLE 10g

У меня есть агрегированный столбец varchar2, содержащий выполненные сканирования в Oracle 10g. Пример:

My_Column
XXXOABBOABBBBOABBBOABBBOABBBOABBBOOABUXXX

Мне нужно удалить повторяющиеся одновременные символы, а именно. Мне нужно преобразовать строку выше в:

My_Column
XOABOABOABOABOABOABOABUX

Мне нужно сохранить относительный порядок каждого символа. Как я могу это сделать?

Я думаю об использовании вложенных функций REPLACE() для очистки строки, но я ищу менее запутанную альтернативу


person Attila The Geek    schedule 23.07.2015    source источник
comment
я бы посмотрел на функциональность regexp_substr, она очень мощная, так что вы, вероятно, можете что-то с ней сделать   -  person davegreen100    schedule 23.07.2015
comment
Как говорит Дейвгрин, вы можете использовать regexp_substr с регулярным выражением, например (\\w)\\1+ С уважением, Гиова   -  person Giova    schedule 23.07.2015
comment
Спасибо @davegreen100. Позвольте мне проверить это.   -  person Attila The Geek    schedule 23.07.2015
comment
Спасибо @Giova. Позвольте мне проверить это.   -  person Attila The Geek    schedule 23.07.2015
comment
@Giova Нет, это не сработает. Он вернет NULL.   -  person Lalit Kumar B    schedule 23.07.2015


Ответы (1)


Вы можете использовать REGEXP_REPLACE.

Например,

SQL> WITH DATA(str) AS(
  2  SELECT 'XXXOABBOABBBBOABBBOABBBOABBBOABBBOOABUXXX' FROM dual
  3  )
  4  SELECT str, regexp_replace(str, '(.)\1+','\1') new_str FROM DATA;

STR                                       NEW_STR
----------------------------------------- ----------------------------
XXXOABBOABBBBOABBBOABBBOABBBOABBBOOABUXXX XOABOABOABOABOABOABOABUX

SQL>
person Lalit Kumar B    schedule 23.07.2015