Как удалить один или несколько экземпляров '? *' В строке, используя функцию REGEXP_REPLACE в Oracle? - PullRequest
1 голос
/ 11 июля 2019

Я получаю символы '?*' от одного до трех раз в столбце с именем Линия.Я обязан удалить этих персонажей.Как мне это сделать, используя Replace или REGEXP_REPLACE?

SELECT
    Line, REGEXP_REPLACE(LINE,'[?*]','')--([^\+]+)
FROM
    TABLE
WHERE
    INSTR(LINE,'?*') != 0;

, где

REGEXP_REPLACE(LINE,'\?*','') заменяет только ? и оставляет * нетронутым.

REGEXP_REPLACE(LINE,'?*','') заменяет nothing.

REGEXP_REPLACE(LINE,'[?*]','') заменяет все ?s и все *s.Я заменяю только когда ? и * собираются вместе как ?*.

Ответы [ 2 ]

4 голосов
/ 11 июля 2019

Если вам нужно удалить строку '?*', вы можете использовать replace:

SQL> with test(string) as (
  2      select 'aa?*b?'            from dual union all
  3      select 'a*a?*??b?'         from dual union all
  4      select 'a*a??b???c*?**cc'  from dual union all
  5      select 'aa?b?*?cc?d??*?*?' from dual
  6  )
  7  select string, replace(string, '?*', '') as result
  8  from test;

STRING            RESULT
----------------- ---------------
aa?*b?            aab?
a*a?*??b?         a*a??b?
a*a??b???c*?**cc  a*a??b???c**cc
aa?b?*?cc?d??*?*? aa?b?cc?d??
1 голос
/ 11 июля 2019

Используйте (\?\*) в качестве шаблона:

with tab(line) as
( 
 select 'abc?*ghh*?g?l*'  from dual union all
 select '?*U?KJ*H'        from dual union all
 select '*R5?4*&t?*frg?*' from dual
)
select regexp_replace(line,'(\?\*)','') as "Result String"
  from tab;

Result String
-------------
abcghh*?g?l*
U?KJ*H
*R5?4*&tfrg

Демо

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