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 17/02/2011, 11h16   #1
Invité de passage
 
Inscription : avril 2008
Messages : 24
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 24
Points : 3
Points : 3
Par défaut Contrôle sur une chaîne de caractères

Bonjour,


J'ai un problème similaire à celui-ci.

Je voudrais faire un contrôle sur une chaîne de caractères.
Le pattern que je veux obtenir :

ChaineDeCaractèreSansUnderscore_ChaineDeCaractèreSansUnderscore

Le problème est que quand je spécifie mon pattern :
[a-z, A-Z]+_[a-z, A-Z]+

La combinaison [a-z] accepte le caractère _ et donc je peux me retrouver avec plusieurs _ dans mon paramètre.

Avez-vous une solution pour ne considérer que les caractères a-z sans le '_' ?

Merci d'avance pour vos réponses.
jaussiba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 11h29   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
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 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Je ne pense pas que vous soyez obligé de passer par une expression régulière :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
WITH MyData AS
(
SELECT 'ABC_DEF' AS col FROM dual union ALL
SELECT 'A_C_DEF'        FROM dual union ALL
SELECT 'ABC_D_F'        FROM dual union ALL
SELECT '_______'        FROM dual union ALL
SELECT '_DEF'           FROM dual
)
SELECT col,
       case
         when col LIKE '_%~_%_' escape '~'
          AND length(col) - 1 = length(REPLACE(col, '_', ''))
         then 1
         else 0
       end AS test_pattern
  FROM MyData;
 
COL     TEST_PATTERN
------- ------------
ABC_DEF            1
A_C_DEF            0
ABC_D_F            0
_______            0
_DEF               0
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 11h47   #3
Invité de passage
 
Inscription : avril 2008
Messages : 24
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 24
Points : 3
Points : 3
je voulais savoir quelle expression régulière pour mon test pour n'avoir que le pattern ChaineDeCaractèreSansUnderscore_ChaineDeCaractèreSansUnderscore

Code :
1
2
3
4
5
6
 
        IF OWA_PATTERN.MATCH(p_codeoffretechnique, ) THEN
         DBMS_OUTPUT.PUT_LINE(Match found);
        ELSE -- vérification du formattage du codeoffretechnique
                DBMS_OUTPUT.PUT_LINE(Match NOT found);
        END IF;

Ca m'arrangerai de passer par une expression regulière.
Je vois pas comment l'uiliser dans mon bloc pl/SQL ta solution

Merci
jaussiba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 20h47   #4
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Salut,

Essaie cette solution
Code :
1
2
3
4
 
SELECT col
  FROM MyData
  WHERE REGEXP_LIKE(COL,'^[[:alpha:]]+_[[:alpha:]]+$')
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
WITH MyData AS
(
SELECT 'ABC_DEF' AS col FROM dual union ALL
SELECT 'A_C_DEF'        FROM dual union ALL
SELECT 'ABC_D_F'        FROM dual union ALL
SELECT '_______'        FROM dual union ALL
SELECT '_DEF'           FROM dual
)
SELECT col
  FROM MyData
  WHERE REGEXP_LIKE(COL,'^[[:alpha:]]+_[[:alpha:]]+$');
 
COL    
-------
ABC_DEF
 
 
1 row selected.
__________________
Publications: http://schelabi.developpez.com/
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 09h16   #5
Invité de passage
 
Inscription : avril 2008
Messages : 24
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 24
Points : 3
Points : 3
Merci pour vos réponses.

Ca marche très bien.
jaussiba 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 12h12.


 
 
 
 
Partenaires

Hébergement Web