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

Langage SQL Discussion :

Sélection dans une chaine de caractère


Sujet :

Langage SQL

  1. #1
    Débutant
    Inscrit en
    Juin 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 108
    Points : 52
    Points
    52
    Par défaut Sélection dans une chaine de caractère
    Bonjour,

    Voici la requête que j'essais de faire :

    j'ai une table qui contient le champ avec les enregistrements suivants :

    Venezuela Financial
    IR- Rx Pharma. in Europe
    IR- Drug Delivery in North America
    Finland Corporates

    Mon but et de renseigner un champs de cette même table avec uniquement le pays ou la zone géographique correspondantes :

    Voilà ce que je veux obtenir :

    Venezuela
    Europe
    North America
    Finland

    Sachant qu'à la rigueur, je peux m'appuyer sur une table intermédiaire où les pays et zone sont inscrites.

    Merci pour votre aide

  2. #2
    Membre éclairé Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 547
    Points : 670
    Points
    670
    Par défaut
    Il suffit par exemple de creer une fonction stockee f(chaine), construite de maniere a en extraire le pays a l'aide de la table des pays.
    Des lors, sous SQL, on obtiendra l'ensemble des valeurs par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT f(colonne)
    FROM   ma_table
    /

  3. #3
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Create table RE15_Table (Nom varchar(100));
    insert into RE15_Table values ('Venezuela Financial');
    insert into RE15_Table values ('IR- Rx Pharma. in Europe');
    insert into RE15_Table values ('IR- Drug Delivery in North America');
    insert into RE15_Table values ('Finland Corporates');
    create table RE15_Pays (Pays varchar(20));
    insert into RE15_Pays values ('Venezuela');
    insert into RE15_Pays values ('Europe');
    insert into RE15_Pays values ('North America');
    insert into RE15_Pays values ('Finland');
     
    SELECT Nom, Pays
    FROM RE15_Table INNER JOIN RE15_Pays ON Nom LIKE '%' || Pays || '%';
    Cela ne marchera pas si dans ta table Pays tu as "Grande Bretagne" et "Bretagne"

    En ajoutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into RE15_Table values ('Crèpes de Bretagne');
    insert into RE15_Table values ('Crèpes de Grande Bretagne');
    insert into RE15_Pays values ('Bretagne');
    insert into RE15_Pays values ('Grande Bretagne');
    Les deux requêtes suivantes donnent la bonne réponse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT Nom, Pays
    FROM RE15_Table t INNER JOIN RE15_Pays b
                            ON Nom LIKE '%' || Pays || '%'
                      INNER JOIN (SELECT Nom, max(length(Pays)) Longueur
                                  FROM RE15_Table INNER JOIN RE15_Pays 
                                                        ON Nom LIKE '%' || Pays || '%'
                                  GROUP BY Nom) a
                            ON  t.Nom = a.Nom
                            AND Length(Pays) = Longueur;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT Nom, Pays
    FROM RE15_Table t INNER JOIN RE15_Pays a
                            ON Nom LIKE '%' || Pays || '%'
    WHERE NOT EXISTS (SELECT NULL 
                      FROM RE15_Pays b
                      WHERE Nom LIKE '%' || b.Pays || '%'
                      AND Length(b.Pays) > Length(a.Pays));
    La deuxième devrait être plus performante.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. Réponses: 7
    Dernier message: 17/09/2005, 23h38
  3. Récuperer un nombre dans une chaine de caractère
    Par ColonelHati dans le forum C
    Réponses: 4
    Dernier message: 27/04/2005, 14h50
  4. [VB.NET] Recherche dans une chaine de caractères
    Par Pleymo dans le forum Windows Forms
    Réponses: 12
    Dernier message: 09/04/2005, 10h25
  5. [C#] Une variable dans une chaine de caractères...
    Par GlorfindelHebril dans le forum Windows Forms
    Réponses: 9
    Dernier message: 31/03/2005, 14h30

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