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 :

Remonter une partie d'un champ


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 85
    Points : 54
    Points
    54
    Par défaut Remonter une partie d'un champ
    Bonjour,

    j'ai une table X avec une colonne qui s'intitule age et les informations apparaissent de cette façon:

    age_schema_G12_BL
    age_schema_F12_BL
    age_schema_T13_BL
    ....

    je souhaiterais remonter dans mon select uniquement les informations qui sont entre les "age_schema_" et "_BL"

    Pourriez-vous m'orienter?
    Merci

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Utilisez les fonctions des chaines des caractères ou les expressions régulières.

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 127
    Points : 339
    Points
    339
    Par défaut
    Bonjour,

    Inspirez-vous de ce mélange de SUBSTR et de INSTR qui récupère la chaîne de caractères comprise entre le deuxième et le troisième '_' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT SUBSTR(
             ma_colonne,
             INSTR(ma_colonne, '_', 1, 2) + 1,
             INSTR(ma_colonne, '_', 1, 3) -  (INSTR(ma_colonne, '_', 1, 2) + 1)
             )
    FROM  
      ma_table;

  4. #4
    Membre averti 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
    Points : 334
    Points
    334
    Par défaut
    Citation Envoyé par jobar38 Voir le message
    je souhaiterais remonter dans mon select uniquement les informations qui sont entre les "age_schema_" et "_BL"
    Bonjour,

    Si toutes les lignes dans cette colonne ont le format

    age_schema_<info qui vous intéresse>_BL

    Alors vous pouvez utiliser regexp_replace pour vous débarasser de tout ce qui ne vous intéresse pas.

    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
     
    WITH tmptab AS
    (
        SELECT 'age_schema_G12_BL' AS colval FROM "PUBLIC".dual UNION ALL
        SELECT 'age_schema_F12_BL' AS colval FROM "PUBLIC".dual UNION ALL
        SELECT 'age_schema_T13_BL' AS colval FROM "PUBLIC".dual
    )
    SELECT  t1.colval,
            regexp_replace(t1.colval, '(age_schema_)|(_BL)') token
    FROM    tmptab t1;
     
     
    COLVAL		          TOKEN
    -----------------         ---------------------------
    age_schema_G12_BL         G12
    age_schema_F12_BL         F12
    age_schema_T13_BL         T13
     
    SQL>
    Mais bon, en même temps ça ne marche que si l'on part sur le principe que dans l'information que vous cherchez il n'y aura ni age_schema_ ni _BL .

    Sinon une autre façon de faire:

    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
     
    WITH tmptab AS
    (
        SELECT 'age_schema_G12_BL' AS colval FROM "PUBLIC".dual UNION ALL
        SELECT 'age_schema_F12_BL' AS colval FROM "PUBLIC".dual UNION ALL
        SELECT 'age_schema_T13_BL' AS colval FROM "PUBLIC".dual
    )
    SELECT  t1.colval,
            substr
            (
                t1.colval                               ,
                regexp_instr(t1.colval, '_', 1, 2) + 1  ,
                regexp_instr(t1.colval, '_', 1, 3) - 
                regexp_instr(t1.colval, '_', 1, 2) - 1     
            ) token
    FROM    tmptab t1;
     
     
    COLVAL		          TOKEN
    -----------------         ---------------------------
    age_schema_G12_BL         G12
    age_schema_F12_BL         F12
    age_schema_T13_BL         T13
     
    SQL>
    Cordialement,
    Dariyoosh

  5. #5
    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
    Citation Envoyé par dariyoosh Voir le message
    Sinon une autre façon de faire :
    Pourquoi utiliser le coûteux regexp_instr au lieu de instr si on n'utilise pas d'expression régulière ?

  6. #6
    Membre averti 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
    Points : 334
    Points
    334
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Pourquoi utiliser le coûteux regexp_instr au lieu de instr si on n'utilise pas d'expression régulière ?
    C'est vrai et je ne sais pas pourquoi je n'ai pas pensé à ça (pourtant je n'avais rien bu ). Voici donc la version avec instr

    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
     
    WITH tmptab AS
    (
        SELECT 'age_schema_G12_BL' AS colval FROM "PUBLIC".dual UNION ALL
        SELECT 'age_schema_F12_BL' AS colval FROM "PUBLIC".dual UNION ALL
        SELECT 'age_schema_T13_BL' AS colval FROM "PUBLIC".dual
    )
    SELECT  t1.colval,
            substr
            (
                t1.colval                        ,
                instr(t1.colval, '_', 1, 2) + 1  ,
                instr(t1.colval, '_', 1, 3) - 
                instr(t1.colval, '_', 1, 2) - 1     
            ) token
    FROM    tmptab t1;
     
     
     
    COLVAL		          TOKEN
    -----------------         ---------------------------
    age_schema_G12_BL         G12
    age_schema_F12_BL         F12
    age_schema_T13_BL         T13
     
    SQL>
    Cordialement,
    Dariyoosh

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 85
    Points : 54
    Points
    54
    Par défaut
    Merci a tous cela fonctionne parfaitement!

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

Discussions similaires

  1. griser une partie d'un champ text
    Par ph_anrys dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 13/07/2006, 13h59
  2. Requête sur une partie d'un champ
    Par KEROZEN dans le forum Access
    Réponses: 4
    Dernier message: 26/03/2006, 20h50
  3. Recherche d'une partie d'un champ texte
    Par Daniel MOREAU dans le forum Access
    Réponses: 2
    Dernier message: 13/01/2006, 18h04
  4. Select sur une partie d'un champs texte
    Par dl_jarod dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/11/2005, 15h25
  5. tri sur une partie d'un champ
    Par yoline dans le forum Access
    Réponses: 4
    Dernier message: 19/09/2005, 11h25

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