Как извлечь подстроку до определенного слова? - PullRequest
0 голосов
/ 01 октября 2019

Мне дан список мест:

location
Smith St
Smith Street 
10 Happy Lily Rd 
52 Happy Lily Road
Abraham St

Вот что я надеюсь достичь:

location
Smith Street
Happy Lily Road
Abraham Street

Могу ли я узнать, как мне это сделать с помощью регулярных выражений? Спасибо !!

Ответы [ 3 ]

1 голос
/ 01 октября 2019

Вот ваш запрос. Я добавил space в выборку, поэтому 'notstreetorRoad' не будет включен

with cte(location) AS(
  select 'Smith St' from dual 
  union all
  select 'Smith Street' from dual
  union all
  select '10 Happy Lily Rd ' from dual
  union all
  select '52 Happy Lily Road' from dual
  union all
  select 'notstreetorRoad' from dual
  union all
  select 'good road' from dual
)
select * from cte where  REGEXP_LIKE(lower(location), ' road| street| st| rd')

результат:

enter image description here

1 голос
/ 02 октября 2019

Поскольку у вас есть специальное требование для группировки строк с некоторой двусмысленностью (Rd & Road, St и Street, без чисел), вам необходимо сначала сравнить строки, чтобы иметь возможность их сравнивать. После этого вы можете просто использовать группу по (или по отдельности) для устранения двойных чисел.

with testtab AS(
  select 'Smith St' as LOCATIONCOLUMN from dual 
  union all
  select 'Smith Street' from dual
  union all
  select '10 Happy Lily Rd ' from dual
  union all
  select '52 Happy Lily Road' from dual
  union all
  select '52 Happy Lily road' from dual
  union all
  select 'notstreetorRoad' from dual
  union all
  select 'notstreetorRd' from dual
  union all
  select 'good road' from dual
)
select formatedLoc
from (select trim(regexp_replace(regexp_replace(regexp_replace(LOCATIONCOLUMN, 'St *$|Street *$', 'Street', 1, 0, 'Rd *$|Road *$', 'Road', 1, 0, 'i'), '\d', '')) as formatedLoc
       from testtab) formatedTab
group by formatedLoc;

доходность

FORMATEDLOC                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
-----------------
Happy Lily Road
notstreetorRoad
good road
Smith Street

Он заменяет St на улицу, Rd на дорогу, удаляет все числа инаконец обрезает результат. Тогда вы можете легко устранить двойные числа.

Поскольку это очень специфично, вам придется самостоятельно добавлять другие возможные неоднозначные строки.

1 голос
/ 01 октября 2019

Не было правильной структуры или информации для извлечения данных из таблицы. Позвольте мне предположить, что вы хотите получить адрес со словами заполнения.

SELECT location FROM TABLE1 WHERE location LIKE '%Street%' OR location LIKE '%road%' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...