2017-05-02 3 views
0

Je souhaite formater les données dans une colonne particulière (varchar) à l'aide d'expressions régulières.Format du texte dans Oracle à l'aide de l'expression régulière

L'exigence est que tout préfixe "SAINT" ou "ST." Ou "STE" doit être remplacé par "ST". Tous les caractères spéciaux tels que "'", "-" etc. doivent être supprimés et tous les suffixes "COUNTY"/"CITY" doivent être supprimés.

Par exemple, le texte ST. JOHN'S CITY doit être au format ST JOHNS ou le texte STE CITY COUNTY COUNTY ABC-STE'XYZ doivent être au format ST ABCSTEXYZ CITY COUNTY.

Quelqu'un peut-il aider plz ..

Merci

+2

Cela découle clairement de votre question précédente. Il semble que vous soyez sur la bonne voie pour lancer ** Oracle Text **. Cette bibliothèque fournit la recherche en texte intégral avec correspondance floue: vous devriez certainement vérifier la recherche de nom. Dans le contexte de cette question, vous pourriez être intéressé par sa fonction Thesaurus. [En savoir plus] (http://docs.oracle.com/cd/E11882_01/text.112/e24435/toc.htm). – APC

+1

Votre question concerne-t-elle spécifiquement la fonction ['regexp_replace'] (http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions149.htm)? Si oui, de quel aspect avez-vous besoin d'aide? Si la question est de savoir comment appliquer plusieurs transformations standard à une colonne de texte, veuillez la mettre à jour pour la rendre plus claire. –

+0

Je l'ai édité. –

Répondre

0

S'il vous plaît vérifier si les travaux suivants pour vous. Je l'ai testé et il a donné des résultats corrects.

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

semble laid, mais semble faire le travail

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 

Le drapeau « i » est ajouté pour rendre l'expression rationnelle insensible à la casse.