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

Откуда:
Сообщений: 2
Есть две таблицы А и В. В таблице А есть столбец number_house, где номера домов, в таблице В есть столбец full_address, где находится полный адрес. Необходимо найти адреса, где совпал номер дома. По сути это поиск подстроки в строке. В частном случае можно было написать:
REGEXP_SUBSTR('236012, ОБЛАСТЬ КАЛИНИНГРАДСКАЯ, Г. КАЛИНИНГРАД, УЛ КОМСОМОЛЬСКАЯ, Д12 К. А, ПОМЕЩ 25', '\D12\D')

но как я понимаю нельзя написать:
REGEXP_SUBSTR(full_address,'\Dnumber_house\D')
, а условие, что впереди и после номера дома не должно быть цифры необходимо, чтобы было меньше ложных срабатываний. Может быть кто-нибудь знает как в таком случае надо писать регулярное выражение?
3 май 21, 10:55    [22317722]     Ответить | Цитировать Сообщить модератору
 Re: Регулярное выражение в Oracle  [new]
Maxim Demenko
Member

Откуда: Munich, Germany
Сообщений: 954
Bory_0_0,

+ Так ?
with b as (
select  '236012, ОБЛАСТЬ КАЛИНИНГРАДСКАЯ, Г. КАЛИНИНГРАД, УЛ КОМСОМОЛЬСКАЯ, Д12 К. А, ПОМЕЩ 25' as full_address from dual union all
select  '236012, ОБЛАСТЬ КАЛИНИНГРАДСКАЯ, Г. КАЛИНИНГРАД, УЛ КОМСОМОЛЬСКАЯ, Д24 К. А, ПОМЕЩ 25' as full_address from dual union all
select  '236012, ОБЛАСТЬ КАЛИНИНГРАДСКАЯ, Г. КАЛИНИНГРАД, УЛ КОМСОМОЛЬСКАЯ, Д35 К. А, ПОМЕЩ 25' as full_address from dual 
),
a as (
select 12 as number_house from dual union all
select 24 as number_house from dual union all
select 112 as number_house from dual
)
select a.*,b.*
from a , b 
where (REGEXP_like(b.full_address,'\D'||a.number_house||'\D'))

Regards

Maxim
3 май 21, 11:30    [22317732]     Ответить | Цитировать Сообщить модератору
 Re: Регулярное выражение в Oracle  [new]
Bory_0_0
Member

Откуда:
Сообщений: 2
Помогло! спасибо огромное!
3 май 21, 11:36    [22317735]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить