Архив

Публикации с меткой ‘REGEXP_REPLACE’

Удаление управляющих символов из строки

Для удаления управляющих символов (не отображаемых) можно использовать регулярные выражения:

  • REGEXP_LIKE — для поиска значений с управляющими символами
  • REGEXP_REPLACE — для удаления управляющих символов
select str, regexp_replace(t.str, '[[:cntrl:]]') as new_str
from (
select 'test1'||chr(28) as str from dual
union all
select 'test2' from dual
union all
select 'test3+_*- =\\\|()^%#3@' from dual
) t
where regexp_like(t.str, '[[:cntrl:]]')

STR                    NEW_STR
---------------------- ----------------------
test1                  test1

Регулярные выражения — оставить только цифры или буквы

28 Август 2013 8 comments

Пример использования регулярного выражения (regexp_replace)
— оставить только буквы
— оставить только цифры

with t as (select '#2 apps(0_-ORACLE+*.ru_ )ПРИ13мер' str from dual)
select str
     , regexp_replace(str,'[^[[:alpha:]]]*') as only_char
     , regexp_replace(str,'[^[[:digit:]]]*') as only_number
from t
/

STR                                 ONLY_CHAR                 ONLY_NUMBER
---------------------------------   ------------------------  --------------------
#2 apps(0_-ORACLE+*.ru_ )ПРИ13мер   appsORACLEruПРИмер        2013

Замена N-ного символа в строке

28 Октябрь 2011 2 comments

Для замены N-ного символа в строке, можно обойтись и без SUBSTR — использовать REGEXP_REPLACE.

select regexp_replace('208010100000','.','X', 5, 1) as res from dual
union all
select regexp_replace('208010100000','.','X', 2, 1) as res from dual;

RES
------------
2080X0100000
2X8010100000

Заменить подстроку, но только если перед ней пробел или запятая

2 Апрель 2010 5 comments

Для строки «asdfdasf,abs@dev, sdfasdf» надо найти вхождение «abs@» и заменить на «abs@fn», но только в том случае, если перед вхождением запятая или пробел.

select regexp_replace(str, '([, ]abs@)', '\1fn') as val
from (select 'aabs@sdfdasf,abs@dev, sd abs@fasdf' str from dual)
--
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0
Connected as apps

SQL> select regexp_replace(str, '([, ]abs@)', '\1fn') as val
  2    from (select 'aabs@sdfdasf,abs@dev, sd abs@fasdf' str from dual);

VAL
--------------------------------------
aabs@sdfdasf,abs@fndev, sd abs@fnfasdf

SQL>

Регулярные выражения Oracle (regular expression)

31 Март 2010 31 comments


Регулярные выражения произошли из теорий автоматов и формальных языков, поэтому поначалу производят устрашающее впечатление. Однако, их базовые понятия являются простыми и в то же время мощными.
Начиная с версии Oracle 10g регулярные выражения можно использовать напрямую в SQL запросах.

Шаблон регулярных выражений выражается в виде строки, содержащей следующие конструкции:

  • Литеральные символы. Фактические символы, которые следует искать (Например, шаблон xyz соответствует только вхождению «xyz»)
  • Метасимволы. Операции, определяющие алгоритмы, которые должны применяться во время поиска (Например, шаблон ^xyz соответсвует только строке, начинающейся с «xyz» — другие вхождения не учитываются)

Читать дальше про “Регулярные выражения Oracle (regular expression)” »

Замена кратных пробелов на один

17 Март 2010 6 comments
with t as (
  select 1 id, 'a s        sfd' info from dual
   union all
  select 2 id, 'a        b; g;g ;g  f' info from dual
   union all
  select 3 id, 'a     ' info from dual
   union all
  select 4 id, '     ' info from dual
)
SELECT id, REGEXP_REPLACE(TRIM(info), '  *', ' ') AS info_new FROM t
ORDER BY id;

Пример:

        ID INFO_NEW
---------- --------------------------------------------------------------------------------
         1 a s sfd
         2 a b; g;g ;g f
         3 a
         4