使用正则表达式在Oracle中格式化文本

时间:2017-05-02 09:33:38

标签: regex oracle plsql oracle11g full-text-search

我想使用正则表达式格式化特定列(varchar)中的数据。

要求是任何前缀“SAINT”或“ST。”或“STE”应替换为“ST”。应删除所有特殊字符,如“'”,“ - ”等,并删除任何后缀“COUNTY”/“CITY”。

例如,文字 ST。应将JOHN'S CITY 格式化为 ST JOHNS STE ABC-STE'XYZ CITY COUNTY COUNTY 文本格式应为 ST ABCSTEXYZ CITY COUNTY

任何人都可以帮助..

由于

2 个答案:

答案 0 :(得分:0)

请检查以下内容是否适合您。我测试了它,它给出了正确的结果。

create table test_stack (id number , address varchar2(4000)) ;

insert into test_stack values( 1 , 'ST. JOHN''S CITY') ;
insert into test_stack values( 2 , 'STE JOHN-ABC-/''DEF CITY COUNTY CITY') ;

select id , 
regexp_replace(regexp_replace(regexp_replace( address , '^(\S*)' , 'ST') , '(\S*)$' , '') , '([^[:blank:]a-zA-Z\d])' , ''  ) 
from test_stack

答案 1 :(得分:0)

看起来很丑,但似乎做了这个工作

SELECT 
location,
REGEXP_REPLACE(
    REGEXP_REPLACE(
        location,
        '[^A-Z0-9 ]+|\s*(CITY|COUNTY)\s*$','',1,0,'i'),
    '^(SAINT|STE) ','ST ',1,0,'i') as new_location
FROM (
    select 'ST. JOHN''S CITY' as location from dual
    union all
    select 'SAINT JOHN''S COUNTY' as location from dual
    union all
    select 'STE ABC-STE''XYZ CITY COUNTY COUNTY' as address from dual
) Q

'我'添加的标志是使正则表达式不区分大小写。