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 :

Découper chaîne séparateur ";"


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 21
    Points : 15
    Points
    15
    Par défaut Découper chaîne séparateur ";"
    Bonjour,

    J'ai un problème similaire à celui-ci.
    J'ai pas mal parcouru les autres sujets et a vrai dire je me retrouve avec le même problème a chaque fois.

    J'explique :

    Je possède un champ, que j'utilise dans un requête et ce champs me retourne une liste ( exemple :"142;654;12" ) et ensuite de cette liste je dois chercher un libellé qui va correspondre a chaque nombre, un mot 142, un mot pour 654 ... Et va me le retourner dans une liste si possible

    Donc j'imagine qui faut mettre la liste séparer dans un tableau, faire la requête et mettre le résultat dans une liste. Je n'ai aucune idée de comment faire ça j'ai beaucoup chercher et je suis tombé sur ça :

    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 t AS (
      SELECT 'one|two|three|four|five|six|seven' c FROM dual 
    --UNION ALL  SELECT 'Un|Deux|Quatre' FROM dual 
       )
      SELECT extractvalue(COLUMN_VALUE,'/x') as liste
      FROM t,
     TABLE( xmlsequence(EXTRACT(XMLTYPE('<list><x>'|| REPLACE(c,'|','</x><x>') ||'</x></list>')
    				, '/list/x')));
     
    LISTE
    one
    two
    three
    four
    five
    six
    seven
    Je me demande si on peut le faire en remplaçant la chaine au début par un champs, j'ai essayé mais sans résultat.
    Je sollicite donc votre aide !!

    Merci bonne journée

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 396
    Points
    9 396
    Par défaut
    Je recopie la question, en enlevant les exemples :
    ce champs me retourne une liste ... et ensuite de cette liste je dois chercher un libellé ... Et va me le retourner dans une liste si possible
    Donc tu as une liste, et tu veux la transformer en liste.
    Donc rien à faire.

    Je pense que ce que tu veux faire, c'est l'équivalent de SPLIT_PART en Postgres. C'est ça ?
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    bonjour,

    J'ai du mal m'exprimer je pense !

    En fait je fais un select et avec ça j'obtiens les données des champs que j'ai sélectionné, parmi ces champs il y en a un qui retourne un liste séparer par des ";" J'ai une autre table avec des libellés et des id, donc ce que j'aimerai c'est que j'obtienne le libellé pour chaque id présent dans ma liste séparer par des ";"


    J'espère que c'est plus clair à présent

  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
    Plutôt que de nous donner du code trouvé sur le net, vous auriez probablement plus de réponses justes en expliquant votre problème avec des tables et des données.
    Table d'entrée, contenu, table de référence, sortie attendu.
    Avec des scripts SQL afin que tout à chacun puisse tester.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Il aurait surement été préférable surement, j'y penserai la prochaine fois en espérant que ça n'arrive jamais

    Néanmoins j'ai trouvé une solution a mon problème :

    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
     
    SELECT SPPTS.PTS_NOPTS,
    SPPTS.PTS_IDUTITRT,
    SPPTS.PTS_CDCAT,
    SPPTS.PTS_CDSITU,
    SPPTS.PTS_LSMOTCLE,
    LISTAGG(SPMOT.MOT_LBMOTCLE, ' / ') WITHIN GROUP (ORDER BY SPPTS.PTS_NOPTS),
    SPPTS.PTS_ZNDESCR
    FROM SPPTS , SPMOT
    WHERE (PTS_CDCAT = 'DEV' or PTS_CDCAT = 'ANA')
    AND (SPPTS.PTS_IDUTITRT is not null)
    AND (SPPTS.PTS_LSMOTCLE is not null)
    AND PTS_CDSITU in (15,10,11,22,12)
    AND instr(';'||PTS_LSMOTCLE||';',';'||SPMOT.MOT_CDMOTCLE||';') <> 0
    GROUP BY SPPTS.PTS_NOPTS, SPPTS.PTS_IDUTITRT, SPPTS.PTS_CDCAT,
    SPPTS.PTS_CDSITU,SPPTS.PTS_LSMOTCLE, SPPTS.PTS_ZNDESCR;
    Il s'agit de ma requête complète donc tout n'est pas forcément a prendre !!

Discussions similaires

  1. Découper chaîne de caractères - séparateur ";"
    Par Cookingya dans le forum SQL
    Réponses: 5
    Dernier message: 04/10/2017, 13h13
  2. [RegEx] Extraire plus chaînes entourées de quote
    Par houpli dans le forum Langage
    Réponses: 1
    Dernier message: 27/05/2015, 16h15
  3. Chaînes entre double quotes
    Par ybruant dans le forum Langage
    Réponses: 6
    Dernier message: 25/03/2008, 14h46

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