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 :

Extraction de caractère avec conditions


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 45
    Points : 26
    Points
    26
    Par défaut Extraction de caractère avec conditions
    Bonjour,

    J'ai une base sous Oracle et j'ai un champ de type string avec une donnée qui va se présenter de plusieurs façons.
    1/ 'Chai'
    ou
    2/ 'Aniseed Syrup.Condiments'

    3/ 'Queso Manchego La Pastora.Pâtes et céréales.Alimentations'

    Je dois voir s'il existe une chaîne de caractère unique ou plusieurs chaînes de caractère séparé par des points.

    Dans le cas 1, je mets Chai dans un champ catégorie
    Dans le cas 2, je mets Aniseed Syrup dans un champ catégorie et Condiments dans un champ sous catégorie
    Dans le cas 2, je mets Queso Manchego La Pastora dans un champ catégorie, Pâtes et céréales dans un champ sous catégorie et Alimentations dans un champ Autre

    Pourriez-vous m'aider car je n'y arrive pas.

    Nikolas

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,


    ce sont des traitements à gérer coté applicatif, en amont des insert.

    Sinon amusez vous avec un trigger + des regex

  3. #3
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    Sous quelle version d'oracle travailles tu?

  4. #4
    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
    SubStr et InsStr
    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
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> 
    SQL> With Data As (
      2    Select 'Chai' as txt from dual union all
      3    Select 'Aniseed Syrup.Condiments' from dual union all
      4    Select 'Queso Manchego La Pastora.Pâtes et céréales.Alimentations' from dual
      5  )
      6  Select Substr(txt||'.',1,Instr(txt||'.','.',1,1)-1) as categorie,
      7         Substr(txt||'.',Instr(txt||'.','.',1,2-1)+1,
      8                Instr(txt||'.','.',1,2)-Instr(txt||'.','.',1,2-1)-1) as sous_categorie,
      9         Substr(txt||'.',Instr(txt||'.','.',1,3-1)+1,
     10                Instr(txt||'.','.',1,3)-Instr(txt||'.','.',1,3-1)-1) as Autre
     11    From Data
     12  /
     
    CATEGORIE                                                  SOUS_CATEGORIE                                             AUTRE
    ---------------------------------------------------------- ---------------------------------------------------------- ----------------------------------------------------------
    Chai                                                                                                                  
    Aniseed Syrup                                              Condiments                                                 
    Queso Manchego La Pastora                                  Pâtes et céréales                                          Alimentations
     
    SQL>

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 45
    Points : 26
    Points
    26
    Par défaut
    Merci a tous.

    Alors je me suis mal exprimé. C'est de ma faute.J'ai un champ qui se nomme designation de type string et je peux trouver plusieurs types de données mais sans les guillemets.

    1/ Chai
    ou
    2/ Aniseed Syrup.Condiments
    ou
    3/ Queso Manchego La Pastora.Pâtes et céréales.Alimentations


    Je suis débutant sous oracle. Comment dois-je écrire ma requête sql comme par exemple celle de mnitu. Je connais seulement par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select designation,(LENGTH(DESIGNATION)-INSTR(DESIGNATION
    ,'.')) as test from produits;
    Merci par avance,

    Nikolas

    (je dois avoir l'une des dernière version de Oracle).

    dois-je faire:
    champ designation de la table produits

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WITH DATA AS (SELECT designation from produits)
     
    SELECT Substr(txt||'.',1,Instr(txt||'.','.',1,1)-1) AS categorie,
             Substr(txt||'.',Instr(txt||'.','.',1,2-1)+1,
                    Instr(txt||'.','.',1,2)-Instr(txt||'.','.',1,2-1)-1) AS sous_categorie,
             Substr(txt||'.',Instr(txt||'.','.',1,3-1)+1,
                    Instr(txt||'.','.',1,3)-Instr(txt||'.','.',1,3-1)-1) AS Autre
    FROM DATA

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 45
    Points : 26
    Points
    26
    Par défaut
    J'ai réussi a faire fonctionner sous ma base de test sur apex ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    WITH DATA AS (SELECT 'Chai' AS txt FROM dual 
    union ALL SELECT 'Aniseed Syrup.Condiments' FROM dual 
    union ALL SELECT 'Queso Manchego La Pastora.Pâtes et céréales.Alimentations' FROM dual)
    SELECT Substr(txt||'.',1,Instr(txt||'.','.',1,1)-1) AS categorie,
    Substr(txt||'.',Instr(txt||'.','.',1,2-1)+1, Instr(txt||'.','.',1,2)-Instr(txt||'.','.',1,2-1)-1) AS sous_categorie, 
    Substr(txt||'.',Instr(txt||'.','.',1,3-1)+1, Instr(txt||'.','.',1,3)-Instr(txt||'.','.',1,3-1)-1) AS Autre 
    FROM DATA;
    mais je dois le transformer en:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WITH produits AS (SELECT designation FROM produits)
     
    SELECT Substr(txt||'.',1,Instr(txt||'.','.',1,1)-1) AS categorie,
             Substr(txt||'.',Instr(txt||'.','.',1,2-1)+1,
                    Instr(txt||'.','.',1,2)-Instr(txt||'.','.',1,2-1)-1) AS sous_categorie,
             Substr(txt||'.',Instr(txt||'.','.',1,3-1)+1,
                    Instr(txt||'.','.',1,3)-Instr(txt||'.','.',1,3-1)-1) AS Autre
    FROM produits
    Merci par avance,

    Nico

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 399
    Points
    28 399
    Par défaut
    Tu as le choix entre deux formulations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    WITH produits AS (SELECT designation AS txt FROM produits)
    SELECT SUBSTR(txt||'.',1,INSTR(txt||'.','.',1,1)-1) AS categorie,
             SUBSTR(txt||'.',INSTR(txt||'.','.',1,2-1)+1,
                    INSTR(txt||'.','.',1,2)-INSTR(txt||'.','.',1,2-1)-1) AS sous_categorie,
             SUBSTR(txt||'.',INSTR(txt||'.','.',1,3-1)+1,
                    INSTR(txt||'.','.',1,3)-INSTR(txt||'.','.',1,3-1)-1) AS Autre
    FROM produits
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT SUBSTR(designation||'.',1,INSTR(designation||'.','.',1,1)-1) AS categorie,
             SUBSTR(designation||'.',INSTR(designation||'.','.',1,2-1)+1,
                    INSTR(designation||'.','.',1,2)-INSTR(designation||'.','.',1,2-1)-1) AS sous_categorie,
             SUBSTR(designation||'.',INSTR(designation||'.','.',1,3-1)+1,
                    INSTR(designation||'.','.',1,3)-INSTR(designation||'.','.',1,3-1)-1) AS Autre
    FROM produits

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 45
    Points : 26
    Points
    26
    Par défaut
    Merci, Merci, Merci.

    Nicolas

  9. #9
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    Tu peux même utiliser regexp_substr si tu es sous Oracle 9i et plus.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 13/05/2014, 12h03
  2. Extraction de paragraphes avec condition
    Par ctiguidou dans le forum Linux
    Réponses: 1
    Dernier message: 07/05/2012, 17h35
  3. Requête extraction de caractères sur condition
    Par Virages dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/09/2010, 14h26
  4. Réponses: 11
    Dernier message: 28/08/2007, 14h06
  5. Extraction d'une chaîne de caractère avec SQL
    Par opeo dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 28/07/2006, 15h36

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