Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Использование REGEXP  [new]
Roomon
Member

Откуда:
Сообщений: 28
Добрый день. Подскажите, пожалуйста, возможно ли и если возможно, то как можно решить следующую задачу в Oracle.
Есть поле адреса из 4 элементов (округ, метро, район, улица) типа ", ЮЗАО, м. Беляево, р-н Коньково , Профсоюзая улица". При этом порядок элементов может быть произвольный. Округ, метро и район можно четко определить по вхождению "АО", " м." и "р-н " соответственно. Например:
substr(regexp_substr(address, ', [^,]+АО'), 6) округ
substr(regexp_substr(address, ', м\. [^,]+'), 6) метро
substr(regexp_substr(address, ', р-н [^,]+'), 6) район

4-й элемент, который остается это улица (в названии может быть проспект, проезд и т.д.) и её нужно определить как элемент, который НЕ содержит в себе ни "АО", ни " м.", ни "р-н ". Как это возможно реализовать с помощью REGEXP? Спасибо.
6 мар 19, 22:49    [21826816]     Ответить | Цитировать Сообщить модератору
 Re: Использование REGEXP  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9362
Roomon
Округ можно четко определить по вхождению "АО"


Можно, но не так как у тебя ибо раньше или позже нарвешься на:

SQL> select regexp_substr(', ZAOZERNAYA STREET',', [^,]+AO') from dual
  2  /

REGEX
-----
, ZAO

SQL> 


SY.
7 мар 19, 00:50    [21826862]     Ответить | Цитировать Сообщить модератору
 Re: Использование REGEXP  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28718
Roomon
порядок элементов может быть произвольный.
Дерьмо-данные без участия ЛПР можно превратить в данные только лишь с КПД, гарантировано меньшим 100%.
7 мар 19, 07:23    [21826918]     Ответить | Цитировать Сообщить модератору
 Re: Использование REGEXP  [new]
Roomon
Member

Откуда:
Сообщений: 28
SY, спасибо за замечание. Поправил:
select regexp_substr(', ZAOZERNAYA STREET','(^|,)[^,]+AO($|,)') from dual



Elic, про КПД <100% полностью согласен. Но пока мне нужно поработать с тем, что есть.
Как можно через REGEXP реализовать что-то вроде:
'(^|,)[(НЕ" м. ")И(НЕ" р-н ")И(НЕ([^,]+AO($|,))И(НЕ(,))]+($|,)'

?
7 мар 19, 08:40    [21826942]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить