2015-11-10 1 views
0
select 'Owens 1245 Coning COM CO LTD INC CORP INC', REGEXP_REPLACE(
     UPPER(TRIM(REGEXP_REPLACE(TRIM(REGEXP_REPLACE(regexp_replace('Owens 1245 Coning COM CO LTD', '(*[[:punct:]])', ' '),'(\s[0-9]+\s)|(^[0-9]+\s)|(\s[0-9]+$)',' ')),'(){2,}', ' '))), 
     '\\b'||'CO|LTD|INC|CORP'||'\\W' 
     ,'') CLEARTEXT 
from dual; 

если я запускаю выше запрос он удаляет все стоп-слова, кроме «СО» и дает выход: Owens конусообразования COM COREGEXP_REPLACE удалить список слов из названия компании колонке

однако мне нужно вывод как: OWENS CONING COM

+0

Возможно, вам нужно добавить еще пару примеров с ожидаемым выходом для уточнения требования. Что считается стоп-словами? –

+0

Слишком много замен на ваш выбор, означающий, что существует такое же количество правил или больше. Поэтому добавьте правила своего оператора replace, чтобы мы могли помочь! –

+0

Извинения, поскольку мои требования были не ясными – meet

ответ

0

Попробуйте это, но обязательно проверяйте каждую комбинацию «стоп-слов» и «хороших» данных, которые могут существовать в столбце. Это регулярное выражение ищет ваши «стоп-слова», за которыми следует пробел или конец строки (пространство потребляется) и ничего не заменяет. Я добавил окружающую скобку, чтобы показать там нет пробелов после окончательного TRIM()):

SQL> with tbl(str) as (
    select 'Owens 1245 Coning COM CO LTD. INC CORP. INC' from dual 
    ) 
    select str original, '[' || trim(regexp_replace(upper(str), '(\d+|CO|LTD|INC|CORP)([[:punct:]])?(|$)', '')) || ']' CLEARTEXT 
    from tbl; 

ORIGINAL 
----------------------------------------- 
CLEARTEXT 
-------------------------------------------------------------------------------- 
Owens 1245 Coning COM CO LTD. INC CORP. INC 
[OWENS CONING COM] 


SQL> 

EDIT: Измененный регулярное выражение, чтобы необязательный знаки препинания после стоп-слов.

0
with t as 
(
select '121 R.S. Hughes3 Company, Inc.' SUPPLIER_NAME from dual 
) 
select a.SUPPLIER_NAME , REGEXP_REPLACE(
     REGEXP_REPLACE(UPPER(TRIM(REGEXP_REPLACE(TRIM(REGEXP_REPLACE(regexp_replace(a.SUPPLIER_NAME , '(*[[:punct:]])', ' '),'(\s[0-9]+\s)|(^[0-9]+\s)|(\s[0-9]+$)',' ')),'(){2,}', ' '))), ''), 
    '(CO|LTD|INC|CORP)?(|$)' 
    ,' ') CLEARTEXT 
from t a 
; 

Благодаря Gary Пыталась изменить исходный запрос, где в я добавил только запрос игнорируемых слов, предоставленный Вами, который дает мне желаемый результат.

Еще раз спасибо.

+0

Извинения, поскольку мои требования не были ясны. Правила: - 1) Заменить все знаки препинания (специальный символ) на «Пробел». 2) Удалите все числовые слова (только числовые слова). 3) Удалите все временные слова из имени, список стоп-слов (CO | LTD | INC | CORP) определяется пользователем и поступает из таблицы, объединенной с (Pipe |). – meet

+0

Все эти вложенные звонки - это не только дорогой, но и кошмар для обслуживания. Я настоятельно рекомендую вам упростить, чтобы ваше имя не было проклято будущими сторонниками этого кода. Упростите и похвалите будущие поколения! Это не будет проходить хороший обзор кода в его текущем состоянии. Я не хочу быть суровым, просто пытаюсь сломать плохую привычку, прежде чем он начнет мой друг. :-) –

Смежные вопросы