Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/07/2011, 09h56   #1
Invité de passage
 
Inscription : juillet 2011
Messages : 2
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 2
Points : 1
Points : 1
Par défaut [REGEXP]regexp_replace avec 2 expressions et 2 valeurs

Bonjour,

J'ai quelques difficultés avec les expressions régulières.

Sur la même requête SELECT, je dois identifier des nombres et les remplacer par 2 valeurs en fonction d'une expression régulière.

La première expression régulière est
peut commencer par 2 ou 3 lettres majuscules, doit être suivi de plus de 7 chiffres, peut finir par 2 ou 3 lettres majuscules
Il faut qu'il y ai au moins 2 lettres soit au début soit a la fin
exemple :
AA0123456789AA
AA0123456789
0123456789AA
a remplacer par [Numéro1]

Et la seconde
si la première n'est pas trouvé,
doit faire plus de 7 chiffres
0123456789
a remplacer par [Numéro2]


Pour le moment mon expression régulière ressemble a
Code sql :
1
2
SELECT champ1, regexp_replace(champ2, '[A-Z]{0,3}[0-9]{7,}[A-Z]{0,3}', '[Numéro1]'), champ3
FROM table1

Je ne sais pas comment faire pour remplacer l'expression 2 par '[Numéro2]', si l'expression 1 n'est pas rencontré.

Mon expression régulière que j'ai déjà écrite, ne fonctionne pas comme je le souhaiterais.

Pouvez vous m'aider ?
Je reste a disposition pour des questions supplémentaires
Cordialement,
Valgrin
valgrin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 11h01   #2
Membre Expert
 
Femme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 480
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 480
Points : 1 024
Points : 1 024
Bonjour,
Avec un CASE et un REGEXP_LIKE on peut arriver à quelquechose. Voici ma proposition s'il faut remplacer tout le contenu du champ :
Code :
1
2
3
4
5
6
7
SELECT champ1
     , (CASE WHEN regexp_like(champ2, '[A-Z]{2,3}[0-9]{7,}') THEN '[Numéro1]'
             WHEN regexp_like(champ2, '[0-9]{7,}[A-Z]{2,3}') THEN '[Numéro1]'  
             WHEN regexp_like(champ2, '[0-9]{7,}') THEN '[Numéro2]'  
             ELSE champ2 END) 
     , champ3
FROM table1
La cascade de WHEN fonctionne comme des SI...SINON SI...SINON SI et permet de tester différents patterns.
Est-ce que le résultat est plus proche de ce que tu dois obtenir ?
tedo01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 11h02   #3
Invité de passage
 
Inscription : juillet 2011
Messages : 2
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 2
Points : 1
Points : 1
Résolu grâce au chat

mon expression était

Code :
'[A-Z]{2,}[0-9]{7,}[A-Z]{2,}|[A-Z]{2,}[0-9]{7,}|[0-9]{7,}[A-Z]{2,}'

Merci a vous !


Mon expression finale ressemble plus a

Code sql :
SELECT regexp_replace(regexp_replace(champ1, '[A-Z]{2,}[0-9]{7,}[A-Z]{2,}|[A-Z]{2,}[0-9]{7,}|[0-9]{7,}[A-Z]{2,}', '[numero1]'), '[0-9]{7,}', '[Numero2]') FROM table1

Mais merci de ta réponse, elle me parait efficace pour remplacer tout le contenu d'un champ mais ce n'est pas ce que je cherche a faire !
valgrin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h35.


 
 
 
 
Partenaires

Hébergement Web