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 :

Supprimer des champs précis d'une chaîne de caractères


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut Supprimer des champs précis d'une chaîne de caractères
    Bonjour,

    Je cherche une solution pour découper une chaîne de caractère qui contient des données que je ne veux plus pour ne conserver au final que le message "générique".

    Voici le modèle de ma chaîne :
    'les donnees sont : Valeur1 = 123456 , Valeur2 = 12345 , Valeur3 = TOTO , Valeur4 = TITI123, Valeur5 = 12345678'

    Et je cherche à obtenir :
    'les donnees sont : Valeur1 = , Valeur2 = , Valeur3 = , Valeur4 = , Valeur5 = '

    Plusieurs paramètre sont à considérer :
    - je travaille en SQL pur (pas de PL/SQL)
    - ma chaîne peut avoir une longueur variable puisque :
    => la longueur des certaines valeurs est variable
    => toutes les valeurs ne sont pas nécessairement renseignées
    - je souhaiterai le faire si possible en une seule passe dans un case car j'ai des chaînes de format différent en fonction des identifiants de ma table

    Le modèle de la table est :
    ID Chaine
    id1 les donnees sont : Valeur1 = 123456 , Valeur2 = 12345 , Valeur3 = TOTO , Valeur4 = TITI123, Valeur5 = 12345678
    id2 chaine2
    id3 chaine3


    Est-ce que vous pensez que ce que je veux faire est possible ?
    Est-ce que quelqu'un aurait une solution pour créer mon premier message générique ? (ensuite j'appliquerai la logique aux autres format)

    Merci de votre aide.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    En passant par une expression régulière :
    http://psoug.org/reference/regexp.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SQL> with t as (
      2  select 'les donnees sont : Valeur1 = 123456 , Valeur2 = 12345 , Valeur3 = TOTO , Valeur4 = TITI123, Valeur5 = 12345678' as chaine
      3    from dual
      4  )
      5  select regexp_replace(chaine, '(=)( )?([[:alnum:]])+( )?(,)?', '\1 \5')
      6    from t;
     
    REGEXP_REPLACE(CHAINE,'(=)()?([[:ALNUM:]])+()?(,)?','\1\5')
    -----------------------------------------------------------------------------
    les donnees sont : Valeur1 = , Valeur2 = , Valeur3 = , Valeur4 = , Valeur5 =
     
    SQL>
    [edit]
    Une version un peu améliorée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SQL> with t as (
      2  select 'les donnees sont : Valeur1 = 123456 , Valeur2 =, Valeur3 =    , Valeur4 = TITI123  , Valeur5 =    12345678' as chaine
      3    from dual
      4  )
      5  select regexp_replace(chaine, '(=)( )?([[:alnum:]]|[[:space:]])?+( )?(,)?', '\1 \5')
      6    from t;
     
    REGEXP_REPLACE(CHAINE,'(=)()?([[:ALNUM:]]|[[:SPACE:]])?+()?(,)?','\1\5')
    -----------------------------------------------------------------------------
    les donnees sont : Valeur1 = , Valeur2 = , Valeur3 = , Valeur4 = , Valeur5 =
     
    SQL>

  3. #3
    Membre expérimenté Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Par défaut
    Il faudrait prendre en compte également les espaces qui sont (éventuellement) avant '='

    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
     
    WITH tmptab AS
    (
        SELECT  'Valeur1 = 123456 , Valeur2 = 12345 , Valeur3 = TOTO   , Valeur4 = TITI123, Valeur5 = 12345678' colval 
        FROM    "PUBLIC".dual
    )
    SELECT  regexp_replace
            (
                t1.colval                       , 
                '[ ]*=[ ]*([[:alnum:]])+[ ]*'   ,
                ' = '
            ) result
    FROM    tmptab t1;
     
     
    RESULT
    ----------------------------------------------------------
    Valeur1 = , Valeur2 = , Valeur3 = , Valeur4 = , Valeur5 =
     
    SQL>

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut
    Bonjour,

    Merci pour vos réponse, j'ai effectivement testé et cela fonctionne parfaitement.

    Après les expressions régulière ce n'est vraiment pas mon fort et il faut que j'arrive à décrypter vos code pour vraiment bien comprendre ce que cela fait, et pouvoir l'appliquer à mes autres chaînes.

    Merci encore à vous et désolé de ne pas avoir donné de réponse plus tôt.

  5. #5
    Membre expérimenté Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Par défaut
    Citation Envoyé par Swenn Voir le message
    Après les expressions régulière ce n'est vraiment pas mon fort et il faut que j'arrive à décrypter vos code pour vraiment bien comprendre ce que cela fait
    Quelques références (parmi d'autres) juste à titre indicatifs:

    http://www.regular-expressions.info/

    http://docs.oracle.com/cd/E11882_01/....htm#ADFNS1013

    http://www.amazon.com/Mastering-Regu...ar+expressions

    http://www.amazon.com/Oracle-Regular...ar+expressions

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/06/2013, 22h57
  2. Réponses: 2
    Dernier message: 12/11/2009, 16h34
  3. Réponses: 0
    Dernier message: 27/08/2009, 16h18
  4. Réponses: 2
    Dernier message: 09/07/2008, 15h20
  5. Réponses: 5
    Dernier message: 25/02/2008, 14h34

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