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 :

Split d'une chaine de caractères


Sujet :

SQL Oracle

  1. #1
    Membre régulier Avatar de Pingva
    Profil pro
    Inscrit en
    Août 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 190
    Points : 78
    Points
    78
    Par défaut Split d'une chaine de caractères
    Bonjour,

    J’ai une colonne avec ces données (chaine de caractères)
    Je dois récupérer les données avant le séparateur ( ‘-‘ ou ‘ :’ ou rien)…
    J’ai du mal à trouver une astuce…
    Je suppose il faut un select regexp_substr, mais je du mal à créer le bon

    3- AAAA
    P- BBBB
    SE: CCCC
    1- DDDD
    2- EEEE
    C- FFFF
    P3- GGGG
    S- HHH
    4- IIII
    F- JJJJ
    0- KKKK
    R+: LLLL
    2R+
    R- MMMM
    R3- NNN
    R12

    ------------------------------------------------------------
    Nom : Capture.JPG
Affichages : 128
Taille : 16,7 Ko

    (c'est la première colonne qui m'intéresse..)

  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
    L'espace fait un très bon séparateur dans votre jeu de données :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    with matable (macolonne) as
    (
    select '3- AAAA' from dual union all
    select 'P- BBBB' from dual union all
    select 'SE: CCCC' from dual union all
    select '1- DDDD' from dual union all
    select '2- EEEE' from dual union all
    select 'C- FFFF' from dual union all
    select 'P3- GGGG' from dual union all
    select 'S- HHH' from dual union all
    select '4- IIII' from dual union all
    select 'F- JJJJ' from dual union all
    select '0- KKKK' from dual union all
    select 'R+: LLLL' from dual union all
    select '2R+' from dual union all
    select 'R- MMMM' from dual union all
    select 'R3- NNN' from dual union all
    select 'R12' from dual
    )
    select case length(macolonne) when length(replace(macolonne, ' ', '')) then macolonne else substr(macolonne, 1, instr(macolonne, ' ') - 2) end as deb
         , case length(macolonne) when length(replace(macolonne, ' ', '')) then null      else substr(macolonne, instr(macolonne, ' ') + 1)    end as fin
      from matable;
     
    DEB      FIN    
    -------- --------
    3        AAAA    
    P        BBBB    
    SE       CCCC    
    1        DDDD    
    2        EEEE    
    C        FFFF    
    P3       GGGG    
    S        HHH     
    4        IIII    
    F        JJJJ    
    0        KKKK    
    R+       LLLL    
    2R+              
    R        MMMM    
    R3       NNN     
    R12

  3. #3
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Une proposition bien affreuse :
    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 '3- AAAA' AS chaine from dual
    union all select 'P- BBBB' from dual
    union all select 'SE: CCCC' from dual
    union all select '1- DDDD' from dual
    union all select '2- EEEE' from dual
    union all select 'C- FFFF' from dual
    union all select 'P3- GGGG' from dual
    union all select 'S- HHH' from dual
    union all select '4- IIII' from dual
    union all select 'F- JJJJ' from dual
    union all select '0- KKK' from dual
    union all select 'R+: LLLL' from dual
    union all select '2R+' from dual
    union all select 'R- MMMM' from dual
    union all select 'R3- NNN' from dual
    union all select 'R12' from dual)
    select 
        chaine, 
        substr(chaine, 1, decode(regexp_instr(chaine, '-|:'), 0, length(chaine), regexp_instr(chaine, '-|:')-1)) AS partie1, 
        ltrim(substr(chaine, regexp_instr(chaine, '-|:')+1, decode(regexp_instr(chaine, '-|:'), 0, 0, length(chaine) - regexp_instr(chaine, '-|:')))) AS partie2
    from t;
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  4. #4
    Membre régulier Avatar de Pingva
    Profil pro
    Inscrit en
    Août 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 190
    Points : 78
    Points
    78
    Par défaut
    Merci beaucoup pour vos réponses, impressionnant !
    J’ai testé ça marche 
    Je ne sais pas si je vais opter pour cette solution, ou créer une table intermédiaire ou je pourrai stocker cette chaine et son code et exploiter ce code ensuite.
    En tout cas c’est très intéressant d’apprendre des nouvelles techniques (pour moi)

  5. #5
    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
    Pour donner la même requête que Pomalaix avec des instr (car Waldar a pris la liberté de gérer l'espace uniquement)

    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
    WITH matable (macolonne) AS
    (
    SELECT '3- AAAA' FROM dual UNION ALL
    SELECT 'P- BBBB' FROM dual UNION ALL
    SELECT 'SE: CCCC' FROM dual UNION ALL
    SELECT '1- DDDD' FROM dual UNION ALL
    SELECT '2- EEEE' FROM dual UNION ALL
    SELECT 'C- FFFF' FROM dual UNION ALL
    SELECT 'P3- GGGG' FROM dual UNION ALL
    SELECT 'S- HHH' FROM dual UNION ALL
    SELECT '4- IIII' FROM dual UNION ALL
    SELECT 'F- JJJJ' FROM dual UNION ALL
    SELECT '0- KKKK' FROM dual UNION ALL
    SELECT 'R+: LLLL' FROM dual UNION ALL
    SELECT '2R+' FROM dual UNION ALL
    SELECT 'R- MMMM' FROM dual UNION ALL
    SELECT 'R3- NNN' FROM dual UNION ALL
    SELECT 'R12' FROM dual
    )
    SELECT macolonne,  
    		CASE WHEN INSTR(REPLACE(macolonne, ':','-'), '-') > 0 THEN SUBSTR(macolonne, 1,  INSTR(REPLACE(macolonne, ':','-'), '-')-1) ELSE macolonne END deb,
        CASE WHEN INSTR(REPLACE(macolonne, ':','-'), '-') > 0 THEN LTRIM(SUBSTR(macolonne, INSTR(REPLACE(macolonne, ':','-'), '-')+1))  ELSE '' END fin
    FROM matable;
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  6. #6
    Membre régulier Avatar de Pingva
    Profil pro
    Inscrit en
    Août 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 190
    Points : 78
    Points
    78
    Par défaut
    McM, merci beaucoup !

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

Discussions similaires

  1. Split d'une chaine de caractères
    Par ourseblanche dans le forum SQL
    Réponses: 20
    Dernier message: 11/04/2017, 11h59
  2. split d'une chaine ce caractères
    Par ROUGE87 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 06/07/2011, 15h57
  3. Séparer une chaine de caractères sans split
    Par ndsaerith dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 24/05/2011, 16h05
  4. [LV2009] Split d'une chaine de caractère
    Par Super2006 dans le forum LabVIEW
    Réponses: 4
    Dernier message: 05/09/2010, 01h35
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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