Проблема выражения REGEXP_REPLACE - PullRequest
2 голосов
/ 25 октября 2019

Ниже приведен сценарий sql для удаления слова между словами, но он найдет последнее вхождение моего (/ hide) вместо первого вхождения. Нужна помощь, чтобы получить результат, как и ожидалось. Спасибо.

select regexp_replace('(hide)it(/hide)should be show(hide)my(/hide) text',
       '^\(hide\).*\(/hide\)', '') "TESTING" 
  from dual;

Я ожидаю, что результат будет:

should be show text

, но фактический вывод:

text

Если мои данные находятся в одном изстолбец с типом данных clob. Как в настоящее время я использую скрипт ниже, чтобы выбрать. Например, моя таблица - test_table со столбцом desc_str с типом данных clob, внутри которого содержится значение «(скрыть) это (/ скрыть) должно быть показано (скрыть) мой (/ скрыть) текст»;

select trim(to_char(regexp_replace(desc_str,'^\(hide\).*\(/hide\)',''))) as desc 
  from testing_table 
 where OOE_FP_SS_ID = $id;

1 Ответ

3 голосов
/ 25 октября 2019

На основе вашего примера:

SQL> with test (col) as
  2    (select '(hide)it(/hide)should be show(hide)my(/hide) text' from dual)
  3  select regexp_replace(col, '\(hide\)\w+\(/hide\)', '') result
  4  from test;

RESULT
-------------------
should be show text

SQL>

[РЕДАКТИРОВАТЬ: CLOB]

Вы запросили CLOB. Вот пример:

SQL> create table test (desc_str clob);

Table created.

SQL> insert into test values ('(hide)it(/hide)should be show(hide)my(/hide) text');

1 row created.

SQL> select regexp_replace(desc_str, '\(hide\)\w+\(/hide\)', '') result from test;

RESULT
--------------------------------------------------------------------------------
should be show text

SQL>

Другой пример:

SQL> with test (desc_str) as
  2    (select '(hide)ItemId: 4334(/hide)|(hide)Description Item - SubType:(/hide) Name - Item|(irow)Price Value: MYR 1,668' from dual)
  3  select regexp_replace(desc_str, '\(hide\).+?\(/hide\)', '') result from test;
                                                ^
RESULT                                          | this question mark was missing
------------------------------------------
| Name - Item|(irow)Price Value: MYR 1,668

SQL>
...