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

PL/SQL Oracle Discussion :

Vérifier format d'une chaine de caractères


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Etudiant
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Points : 48
    Points
    48
    Par défaut Vérifier format d'une chaine de caractères
    Bonjour tous,

    existe-t-il un moyen avec plsql de vérifier par exemple qu'une chaine contient une séquence répétitive? On peut fixer la taille de la chaine.
    Par exemple, comment vérifier qu'une chaine est constitué d'un même caractère qui se répète Ex: 111111111, aaaaaaa, ccccccc.
    Un autre exemple serait les chaines du type xxyyzzxxyyzz, ou autre format.

    Merci d'avance!

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous voulez rechercher la chaîne ou bien vous la connaissez et vous désirez la tester ?

  3. #3
    Membre du Club
    Profil pro
    Etudiant
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Vous voulez rechercher la chaîne ou bien vous la connaissez et vous désirez la tester ?
    En fait il est juste question de vérifier que la chaine vérifie ou pas une certaine condition.
    En réalité, mon problème est que j'ai des numéros d'identification qui sont renseignés par des usagers, et je voudrais vérifier que ces derniers, par paresse ou pour autre raison, ne remplissent pas de numéros fantaisistes du genre une série du même caractère etc.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Compliqué si n'importe quelle chaîne peut être candidate.

    Si vous voulez vérifiez des chaînes en particulier vous pouvez utiliser trim :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select col
      from (select 'xxyyzzxxyyzz' as col from dual)
     where ltrim(col, 'xxyyzz') is null;
     
    COL
    ------------
    xxyyzzxxyyzz

  5. #5
    Membre du Club
    Profil pro
    Etudiant
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Effectivement n'importe quelle chaine peut être candidate. Je me demandais juste si il n'existait pas d'expression régulière ou alors un moyen d'en construire une, comme c'est le cas dans le laungages évolués comme C/C++, PHP, Java, etc.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    En effet avec une expression régulière c'est probablement faisable, mais pas parfait :
    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
    With sr as
    (
    select 'xxyyzzxxyyzz' as col from dual union all
    select 'chaine non repetee'  from dual union all
    select '111111111'           from dual union all
    select 'aaaaaaa'             from dual union all
    select 'ccccccc'             from dual
    )
    select col
      from sr
     where regexp_like(col, '(.{2,})\1');
     
    COL
    ------------
    xxyyzzxxyyzz
    111111111
    aaaaaaa
    ccccccc
    Dans cet exemple l'expression régulière recherche une chaîne d'au moins deux caractères qui est accolée une fois à elle-même.
    À affiner selon vos cas concrets.

  7. #7
    Membre du Club
    Profil pro
    Etudiant
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Waldar Voir le message
    En effet avec une expression régulière c'est probablement faisable, mais pas parfait :
    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
    With sr as
    (
    select 'xxyyzzxxyyzz' as col from dual union all
    select 'chaine non repetee'  from dual union all
    select '111111111'           from dual union all
    select 'aaaaaaa'             from dual union all
    select 'ccccccc'             from dual
    )
    select col
      from sr
     where regexp_like(col, '(.{2,})\1');
     
    COL
    ------------
    xxyyzzxxyyzz
    111111111
    aaaaaaa
    ccccccc
    Dans cet exemple l'expression régulière recherche une chaîne d'au moins deux caractères qui est accolée une fois à elle-même.
    À affiner selon vos cas concrets.
    Merci beaucoup, je dois avouer que ceci est pour moi un début de solution, bien que je ne sache pas encore trop bien comment modifier à ma guise l'expression régulière dans le , mais je vais encore creuser un peu...

  8. #8
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Compliqué si n'importe quelle chaîne peut être candidate.

    Si vous voulez vérifiez des chaînes en particulier vous pouvez utiliser trim :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select col
      from (select 'xxyyzzxxyyzz' as col from dual)
     where ltrim(col, 'xxyyzz') is null;
     
    COL
    ------------
    xxyyzzxxyyzz
    Non Waldar, le ltrim ne vérifie pas l'ordre et c'est une vérification pour chaque caractère.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LTRIM(col, 'xxyyzz') = LTRIM(col, 'xyz') = LTRIM(col,'zyx') =LTRIM(col, 'yzx'),etc..
    Donc ta requête ramène aussi les lignes 'zzzzzzzzzxy' voire 'z'

    Le trim est utile pour vérifier qu'une chaine contient des nombres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LTRIM('11122012', '0123456789') IS NULL
    Ou pour supprimer des caractères de fin/début de chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LTRIM('1; 2; 3; 4; ; ; ', ' ;')
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Je me ferais toujours avoir je crois !
    Merci McM.

Discussions similaires

  1. Changer le format d'une chaine de caractères
    Par Pynouz dans le forum C#
    Réponses: 1
    Dernier message: 08/10/2013, 14h20
  2. Formater une chaine de caractère
    Par jean-pierreL dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2007, 14h59
  3. Vérifier qu'une chaine de caractère est bien présente
    Par kilian67 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 28/09/2007, 18h10
  4. Réponses: 3
    Dernier message: 13/11/2006, 16h08
  5. Réponses: 3
    Dernier message: 01/02/2006, 18h26

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