IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Contrôle sur une chaîne de caractères


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 29
    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.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je ne pense pas que vous soyez obligé de passer par une expression régulière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 29
    Par défaut
    je voulais savoir quelle expression régulière pour mon test pour n'avoir que le pattern ChaineDeCaractèreSansUnderscore_ChaineDeCaractèreSansUnderscore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Salut,

    Essaie cette solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT col
      FROM MyData
      WHERE REGEXP_LIKE(COL,'^[[:alpha:]]+_[[:alpha:]]+$')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 29
    Par défaut
    Merci pour vos réponses.

    Ca marche très bien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Turbo Pascal] Exercice sur une chaîne de caractères
    Par mah00 dans le forum Turbo Pascal
    Réponses: 35
    Dernier message: 10/01/2010, 13h47
  2. Test sur une chaîne de caractères
    Par ThunderBolt_ dans le forum Général VBA
    Réponses: 4
    Dernier message: 27/06/2007, 06h37
  3. recherche sur une chaîne de caractères
    Par bogsy15 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/07/2006, 12h01
  4. Tri sur une chaîne de caractères contenant des nombres
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2006, 11h52
  5. Requête sur une chaîne de caractères
    Par Hakunamatata dans le forum Langage SQL
    Réponses: 9
    Dernier message: 02/04/2006, 18h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo