@DenVilmont
Ingeniero informática

Как создать паттерн для REGEXP_LIKE для двух значений?

Есть документ XML

<.........>
<RRRR>
    <OfficeCode>12125589</OfficeCode>
    <OfficeName>Офис 132</OfficeName>
</RRRR>
<DocumentNumber>1234-258 (копия)</DocumentNumber>
<DocumentDate>2000-01-01</DocumentDate>
<.................>

Сейчас поиск идет с двумя условиями:

AND TO_CLOB(message, 873,'text/xml') LIKE '%OfficeCode>12125589<%'
AND TO_CLOB(message, 873,'text/xml') LIKE '%DocumentNumber1234-258 (копия)<%'

Учу Oracle и хотел объединить два этих условия в один REGEXP_LIKE

Пробовал по разному и никак не хочет находиться. Через ИЛИ работает:

AND REGEXP_LIKE(TO_CLOB(message, 873,'text/xml'), 'OfficeCode>12125589<|DocumentNumber1234-258 (копия)<', 'm')

А вот как сделать И - не могу понять...

последнее что пробовал:

AND REGEXP_LIKE(TO_CLOB(mes.messagebody, 873,'text/xml'), '(OfficeCode>12125589<){1}(.*)(DocumentNumber1234-258 (копия)){1}', 'm')

AND REGEXP_LIKE(TO_CLOB(mes.messagebody, 873,'text/xml'), 'OfficeCode>12125589<(.*)DocumentNumber1234-258 (копия)', 'm')

Но так не раобтает. Не понимаю что не так и как это заставить работать(((
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
@alexalexes
Если в СУБД вы видите функции для работы с регулярными выражениями, то это еще не значит, что реализована вся их мощь.
Например, для вашего случая, чтобы реализовать AND, нужно, чтобы исполнитель регулярок мог обрабатывать ретроспективные или опережающие проверки.
За функциями Oracle такого функционала не замечено, в силу того, что эта СУБД не для полнотекстового поиска, а инструмент для быстрой работы с хорошо структурированными данными.
Ковыряние в фрагментах текста - не конек реляционных СУБД, таким системам индексируемые данные подавай.
Поэтому функционал регулярных функций ограничен, реализованы чуть лучше чем like.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы