REGEXP_REPLACE 从公司名称列中删除单词列表
REGEXP_REPLACE to remove list of words from company name column
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;
如果我 运行 上面的查询它删除除 "CO" 之外的所有停用词并给出输出:OWENS CONING COM CO
但是我需要这样的输出:OWENS CONING COM
试试这个,但一定要用列中可能存在的 "stop words" 和 "good" 数据的每个组合进行测试。此正则表达式查找您的 "stop words" 后跟 space 或行尾(space 被消耗)并替换为空。我添加了括号以显示在最后的 TRIM( )):
之后没有 spaces
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>
编辑:将正则表达式修改为允许在停用词后使用可选的标点符号。
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
;
谢谢加里
试图更改原始查询,其中我只添加了您提供的停用词查询,它为我提供了所需的输出。
再次感谢。
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;
如果我 运行 上面的查询它删除除 "CO" 之外的所有停用词并给出输出:OWENS CONING COM CO
但是我需要这样的输出:OWENS CONING COM
试试这个,但一定要用列中可能存在的 "stop words" 和 "good" 数据的每个组合进行测试。此正则表达式查找您的 "stop words" 后跟 space 或行尾(space 被消耗)并替换为空。我添加了括号以显示在最后的 TRIM( )):
之后没有 spacesSQL> 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>
编辑:将正则表达式修改为允许在停用词后使用可选的标点符号。
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
;
谢谢加里 试图更改原始查询,其中我只添加了您提供的停用词查询,它为我提供了所需的输出。
再次感谢。