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 04/10/2011, 18h41   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 60
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 60
Points : 10
Points : 10
Par défaut Expression régulière regexp_substr

Bonjour,

Je souhaite utiliser regexp_substr pour extraire un montant d'une chaine de caractères qui sera toujours sous le format : "Montant SPECIAL".
Nous pourrons avoir par Exemple : "Cap repay EUR 0.4 + 0.55 SPECIAL", mais seul le montant 0.55 lié à SPECIAL doit être extrait. Le reste est ignoré.
J'ai tenté le code suivant mais il ramène aussi SPECIAL alors que je ne veux que le montant (0.55) de ce SPECIAL:

Code :
1
2
3
4
 
SELECT regexp_substr(chaine, '[[:digit:]]{1}.[[:digit:]]* SPECIAL')AS Montant
    FROM
   (SELECT 'Cap repay EUR 0.4 + 0.55 SPECIAL' chaine FROM dual);

Quelqu'un aurait-il une solution à me proposer ?

Merci!
Djene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 19h03   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Il suffit de rajouter un replace !
Code :
1
2
3
4
5
6
SELECT REPLACE(regexp_substr(chaine, '[[:digit:]]{1}.[[:digit:]]* SPECIAL'), ' SPECIAL', '') AS Montant
  FROM (SELECT 'Cap repay EUR 0.4 + 0.55 SPECIAL' chaine FROM dual);
 
MONTANT
-------
  0.55
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 12h49   #3
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 60
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 60
Points : 10
Points : 10
Par défaut Expression régulière regexp_substr

Ca marche !

Merci beaucoup Waldar pour ton aide!
Djene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 14h28   #4
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 926
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 926
Points : 4 547
Points : 4 547
Code :
regexp_replace(chaine, '.* (\d\.\d*) SPECIAL.*','\1')
il faut savoir les montant possible, 0.00001 à 0.99999 ? ou bien aussi 1000 et 25.12 ?

peut-être donc
Code :
regexp_replace(chaine, '.* ([0-9.]+) SPECIAL.*','\1')
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h16.


 
 
 
 
Partenaires

Hébergement Web