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 :

Séparer un champ texte en lignes


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2017
    Messages : 66
    Points : 39
    Points
    39
    Par défaut Séparer un champ texte en lignes
    Bonjour,

    J'ai un champ texte type mémo (1 colonne 1 ligne) que je souhaiterais séparer en plusieurs lignes et sur 2 colonnes.

    Mon exemple :
    Le contenu est dans une seule ligne !
    54668107$001/190
    54668108$002/190
    54668109$003/290
    54668110$004/110
    54668111$005/190
    54668112$006/190
    54668113$007/190


    et je souhaiterais obtenir ceci :
    54668107$001 190
    54668108$002 190
    54668109$003 290
    54668110$004 110
    54668111$005 190
    54668112$006 190
    54668113$007 190

    Auriez-vous une idée stp ?

    Merci d'avance pour votre aide !

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 137
    Points : 1 917
    Points
    1 917
    Par défaut
    Bonjour,

    Tu peux utiliser la fonction REGEXP_SUBSTR:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select regexp_substr(colonne, '[^/]+'), regexp_substr(colonne, '[^/]+', 1, 2) from t;

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2017
    Messages : 66
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    Oui mais non... comme mes valeurs sont contenues dans une 1 seule et même ligne concaténée en utilisant cette solution je ne récupère que la première valeur et pas l'ensemble de mon champ texte .


    Merci.

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 137
    Points : 1 917
    Points
    1 917
    Par défaut
    Ok, ce n'était pas clair dans le message original. En supposant que ce sont des retours à la ligne qui séparent les valeurs dans ta ligne, tu peux essayer quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select regexp_substr(colonne, '^([^/]+).+$', 1, level, 'm', 1) col1, regexp_substr(colonne, '^[^/]+/(.+)$', 1, level, 'm', 1) col2
    from t
    connect by level <= regexp_count(colonne, chr(10))+ 1;

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2017
    Messages : 66
    Points : 39
    Points
    39
    Par défaut
    oui désolée pour les explications...

    J'ai testé et ça ne marche que pour la première valeur et ça ne me fait qu'une seule ligne... :
    COL1 COL2
    54668107$001 190
    54668108$002/190
    54668109$003/290
    54668110$004/110
    54668111$005/190
    54668112$006/190
    54668113$007/190

    Merci.

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 137
    Points : 1 917
    Points
    1 917
    Par défaut
    Qu'est-ce qui sépare les différentes valeurs? Un saut de ligne, un espace?

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2017
    Messages : 66
    Points : 39
    Points
    39
    Par défaut
    Un saut de ligne

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 137
    Points : 1 917
    Points
    1 917
    Par défaut
    Essaie en mettant chr(10)||'|'||chr(13) dans le regexp_count :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select regexp_substr(colonne, '^([^/]+).+$', 1, level, 'm', 1) col1, regexp_substr(colonne, '^[^/]+/(.+)$', 1, level, 'm', 1) col2
    from t
    connect by level <= regexp_count(colonne, chr(10)||'|'||chr(13))+ 1;

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2017
    Messages : 66
    Points : 39
    Points
    39
    Par défaut
    Avec cette façon, le résultat ne s'affiche pas.... ça reste en cours d'exécution indéfiniment...

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 137
    Points : 1 917
    Points
    1 917
    Par défaut
    Etrange, sur ma base 19c ça fonctionne
    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
     
    with t as 
    (select 
    '54668107$001/190
    54668108$002/190
    54668109$003/290
    54668110$004/110
    54668111$005/190
    54668112$006/190
    54668113$007/190' colonne from dual)
    select regexp_substr(colonne, '^([^/]+).+$', 1, level, 'm', 1) col1, regexp_substr(colonne, '^[^/]+/(.+)$', 1, level, 'm', 1) col2
    from t
    connect by level <= regexp_count(colonne, chr(10)||'|'||chr(13))+ 1;
     
    COL1                 COL2
    54668107$001	190
    54668108$002	190
    54668109$003	290
    54668110$004	110
    54668111$005	190
    54668112$006	190
    54668113$007	190

  11. #11
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2017
    Messages : 66
    Points : 39
    Points
    39
    Par défaut
    J'ai tout mis dans un sous-select et... magique, ça fonctionne et de façon instantanée .

    Merci beaucoup !

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/09/2006, 11h44
  2. Réponses: 2
    Dernier message: 12/02/2006, 15h42
  3. 8i : sql loader et champ texte sur plusieurs lignes
    Par naonedboy dans le forum SQL*Loader
    Réponses: 1
    Dernier message: 23/11/2005, 10h07
  4. [jtable] Champs texte sur pls ligne dans cellule
    Par doudine dans le forum Composants
    Réponses: 8
    Dernier message: 17/11/2005, 12h36
  5. Réponses: 9
    Dernier message: 23/05/2005, 09h35

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