2017-05-02 2 views
0

正規表現を使用して特定の列(varchar)のデータをフォーマットしたいとします。正規表現を使用したOracleフォーマットのテキスト

接頭辞 "SAINT"または "ST"または "STE"を "ST"に置き換える必要があります。 "'"、 " - "などのすべての特殊文字は削除し、接尾辞 "COUNTY"/"CITY"はすべて削除する必要があります。

たとえば、STです。 JOHN'S CITYセントジョーンズ としてフォーマットされるべきか、テキストSTE ABC-STE'XYZ CITY COUNTY COUNTYST ABCSTEXYZ CITY COUNTYとしてフォーマットされるべきです。

誰もがplzはあなたのために作品を以下かどうかを確認してください。..

おかげ

+2

これはあなたの前の質問から明らかです。あなたはゆっくりと** Oracle Text **を手渡しているようです。このライブラリはファジーマッチングのフルテキスト検索を提供します。あなたは間違いなく名前の検索をチェックアウトする必要があります。この質問の文脈では、シソーラスの機能に興味があるかもしれません。 [詳細はこちら](http://docs.oracle.com/cd/E11882_01/text.112/e24435/toc.htm)。 – APC

+1

[regexp_replace](http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions149.htm)機能に関するご質問はありますか?もしそうなら、それのどの部分に助けが必要ですか?質問が実際に複数の標準変換をテキスト列に適用する方法である場合は、それを明確にするために更新してください。 –

+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 
0

醜いが、追加「I」フラグが正規表現大文字と小文字を区別しないを作ることです

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 

仕事をしているようです。

関連する問題