Относительно Oracle Regexp_Replace - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть строка типа "Vinoth ^ Vinoth Karthick Vinoth ^ Vinoth ^ Vinoth", разделенная "^". Я хотел бы заменить только Vinoth на XXX.

I/P String : Vinoth^Vinoth Karthick Vinoth^Vinoth^Vinoth
Expected output : XXX^Vinoth Karthick Vinoth^XXX^XXX

Пожалуйста, предложите, как это сделать, используя Regexp_replace или любую другую функцию в ORACLE SQL Statement.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Еще один вариант:

SQL> with test (col) as
  2    (select 'Vinoth^Vinoth Karthick Vinoth^Vinoth^Vinoth' from dual),
  3  inter as
  4    (select regexp_substr(replace(col, '^', ':'), '[^:]+', 1, level) col,
  5            level lvl
  6     from test
  7     connect by level <= regexp_count(col, '\^') + 1
  8    )
  9  select listagg(regexp_replace(col, '^Vinoth$', 'XXX'), '^')
 10    within group (order by lvl) result
 11  from inter;

RESULT
-----------------------------------------------------------------------------

XXX^Vinoth Karthick Vinoth^XXX^XXX

SQL>
0 голосов
/ 26 апреля 2018

Удвоите символы разделителя ^ и оберните строку в символы ^ разделителя, чтобы у каждого элемента был свой отдельный начальный и конечный разделители, тогда вы можете просто заменить ^Vinoth^ на ^XXX^ и обратить удвоение разделители и обрезки переднего и заднего разделителей:

SQL Fiddle

Настройка схемы Oracle 11g R2 :

SELECT 1 FROM DUAL;

Запрос 1 :

SELECT TRIM(
         '^' FROM
         REPLACE(
           REPLACE(
             '^' ||
             REPLACE(
               'Vinoth^Vinoth Karthick Vinoth^Vinoth^Vinoth',
               '^',
               '^^'
             )
             || '^',
             '^Vinoth^',
             '^XXX^'
           ),
           '^^',
           '^'
         )
       ) AS replaced
FROM   DUAL

Результаты :

|                           REPLACED |
|------------------------------------|
| XXX^Vinoth Karthick Vinoth^XXX^XXX |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...