Архив

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

Разбор строки на числа с разделителем дробной части в виде точки

11 Январь 2011 Нет комментариев

Используя regexp_substr, получим дробные числа из строки.

SELECT regexp_substr(str, '([[:digit:]]+[.]{1}[[:digit:]]+)+', 1, level) str
FROM (
      SELECT ' 5646.45, 45 sd eds,.sd 9 2 566.11 12.3' str FROM dual) t
CONNECT BY 
 regexp_substr(str,'([[:digit:]][.]{1}[[:digit:]])+',1, level)  is not null;

STR
---------------------------------------
5646.45
566.11
12.3

Разбить строку на строчки по 100 символов, не разбивая слова

2 Апрель 2010 4 comments
with t as (
select 'есть длинная строка - которую нужно разбить на строчки по сто символов.'
           || 'Но слова разбивать нельзя, переносить нужно по '
           ||rpad('qwerty',110,'o')||'абвгд' as s from dual
)
select trim(regexp_substr(s,'(.{0,99}(\s|$))|[^[:space:]]{100}',1,level))
from t
CONNECT BY
 regexp_substr(s,'(.{0,99}(\s|$))|[^[:space:]]{100}',1,level) is not null;

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0
Connected as apps

SQL> with t as (
  2      select 'есть длинная строка - которую нужно разбить на строчки по сто символов.'
  3              || 'Но слова разбивать нельзя, переносить нужно по '
  4        ||rpad('qwerty',110,'o')||'абвгд' as s from dual
  5  )
  6  select trim(regexp_substr(s,'(.{0,99}(\s|$))|[^[:space:]]{100}',1,level)) as str
  7  from t
  8  CONNECT BY
  9   regexp_substr(s,'(.{0,99}(\s|$))|[^[:space:]]{100}',1,level) is not null;

STR
--------------------------------------------------------------------------------
есть длинная строка - которую нужно разбить на строчки по сто символов.Но слова
переносить нужно по
qwertyoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooабвгд

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

31 Март 2010 31 comments


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

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

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

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

Извлечь подстроки используя разделители

17 Март 2010 7 comments

Для того чтобы разбить строку на подстроки, используя разделитель «;», можно воспользоваться следующим запросом.
Разделитель, конечно, может быть разный.

SQL> SELECT regexp_substr(str, '[^;]+', 1, level) str
  2  FROM (
  3        SELECT ' 1; 2; test1.' str FROM dual     ) t
  4  CONNECT BY instr(str, ';', 1, level - 1) > 0
  5  ;

STR
-------------
 1
 2
 test1.

Если хотим разбить на слова используя в виде разделителя пробел, то можно использовать perl синтаксис:

SQL> SELECT regexp_substr(str, '\S+', 1, level) str
  2  FROM (
  3        SELECT ' 1 2 test1.' str FROM dual     ) t
  4  connect by regexp_substr(str,'\S+',1,level) is not null
  5  ;

STR
-----------
1
2
test1.

Другие примеры…

Читать дальше про “Извлечь подстроки используя разделители” »