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 :

valeur contenue dans un intervalle


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 71
    Points : 56
    Points
    56
    Par défaut valeur contenue dans un intervalle
    Bonjour,

    J'ai besoin de faire une requête un peu spéciale...en fait, pour des raisons longues à expliquer, je cherche à sélectionner des tuples où 1 champ contient 1 valeur.
    Un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM myTable
    WHERE range CONTAINS M7
    avec range de la forme "M1-M5", "M6-M9", etc.

    je sais que CONTAINS n'existe pas, mais c'est ce que je voudrais faire...

    Est-ce que c'est possible SVP?

    Merci !

  2. #2
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Selon tes besoins et ton SGBD tu peux utiliser les expressions régulières.
    Oracle le permet par exemple.
    Sinon selon les cas un petit BETWEEN pourrait faire l'affaire.
    Il faudrait tester mais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE TOTO BETWEEN 'M1' AND 'M7'
    devrait marcher

  3. #3
    Membre actif Avatar de TheRussian
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 200
    Points : 241
    Points
    241
    Par défaut
    Bonjour,

    sinon tu peux faire avec le LIKE
    SELECT * FROM myTable
    WHERE range LIKE '%M7%'
    @+

  4. #4
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 71
    Points : 56
    Points
    56
    Par défaut
    ok, merci, en fait j'ai bien pensé à un BETWEEN, mais j'ai 1 colonne "range" qui comprend les intervalles,
    avec des valeurs du style "M1-M5"

    et j'aimerais bien faire un BETWEEN, mais...c'est possible de "casser" la valeur d'un champ en 2?
    là, peut être avec les expressions régulières dont tu parles ?? (je maîtrise pas mais..)

  5. #5
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Quel SGBD ?

  6. #6
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 71
    Points : 56
    Points
    56
    Par défaut
    oui pardon, je suis sous mySQL (4.1)

  7. #7
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par javaSudOuest
    ok, merci, en fait j'ai bien pensé à un BETWEEN, mais j'ai 1 colonne "range" qui comprend les intervalles,
    avec des valeurs du style "M1-M5"

    et j'aimerais bien faire un BETWEEN, mais...c'est possible de "casser" la valeur d'un champ en 2?
    Oui, c'est possible :

    - INSTR : retourne la position d'une chaine dans une autre,
    - SUBSTRING : extraction d'une portion de chaîne à partir d'une chaîne,
    - CHARACTER_LENGTH : longueur d'une chaine de caractères.

    (cf http://sql.developpez.com/sqlaz/fonctions pour voir ce qui est accépté par ton SQBD, les 3 fonctions précédentes devraient être reconnues sous MySQL)

    La requête qui te conviendrait alors serait du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * 
      FROM maTable
     WHERE monChamp BETWEEN SUBSTRING(monRange, 1, INSTR(monRange, '-') - 1)
                        AND SUBSTRING(monRange, INSTR(monRange, '-') + 1, CHARACTER_LENGTH(monRange) - INSTR(monRange, '-'))
    Si MonRange = "M6-M9" :
    - INSTR(monRange, '-') = 3
    - CHARACTER_LENGTH(monRange) = 5
    Donc ce serait équivalent à la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * 
      FROM maTable
     WHERE monChamp BETWEEN 'M6'
                        AND 'M9'
    A toi de tester (je ne l'ai pas fait) et de nous dire si ça te convient.

    Ha, autre chose, comment fais-tu pour récupérer la valeur de monRange, je suppose qu'elle n'est pas stockée dans la même table que celle où tu effectues la recherche ?

  8. #8
    Membre actif Avatar de TheRussian
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 200
    Points : 241
    Points
    241
    Par défaut
    Désolé j'avais pas compris la question,
    je ne sais pas si c'est fonction marche sur MySQL (mais sur SQLServer oui) :

    SELECT *
    FROM maTable
    WHERE monChamp BETWEEN left(monRange, 2)
    AND right(monRange, 2)
    Si il n'y a que 5 caractères dans le champ monRange.

  9. #9
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 71
    Points : 56
    Points
    56
    Par défaut
    merci pour votre aide, j'ai essayé les 2 solutions que vous me conseilliez, et dans les 2 cas j'ai le message d'erreur :

    Illegal mix of collations (latin1_swedish_ci,IMPLICIT), (utf8_general_ci,COERCIBLE), (utf8_general_ci,COERCIBLE) for operation 'between'
    et ma requête était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
      FROM maTable
         WHERE monChamp
            BETWEEN SUBSTRING('M1-M9', 1, INSTR('M1-M9', '-') - 1)
                        AND SUBSTRING('M1-M9', INSTR('M1-M9', '-') + 1, CHARACTER_LENGTH('M1-M9') - INSTR('M1-M9', '-'));
    ça vient de MySQL ou j'ai fait une erreur quelque part...?

    Merci

  10. #10
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Est-ce que la requête suivante fonctionne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
      FROM maTable
     WHERE monChamp BETWEEN 'M1'
                        AND 'M9'
    Sinon, il te faudra faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
      FROM maTable
     WHERE monChamp >= 'M1'
       AND monChamp <= 'M9'
    (en adaptant avec les fonctions données)

  11. #11
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Sous MySql tu peux utiliser les expressions réguliere
    http://dev.mysql.com/doc/refman/5.0/en/regexp.html

Discussions similaires

  1. Donner à une feuille la valeur contenue dans une cellule ?
    Par emilie_pons_2005 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/09/2006, 13h32
  2. Réponses: 3
    Dernier message: 13/06/2006, 17h36
  3. Accès aux valeurs contenues dans un objet
    Par WalidNat dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/05/2006, 18h26
  4. Comment afficher une valeur contenue dans une variable ?
    Par manubrard dans le forum Langage
    Réponses: 5
    Dernier message: 20/02/2006, 16h56
  5. Combo box et liste de valeurs contenues dans ma table
    Par TieumB dans le forum C++Builder
    Réponses: 14
    Dernier message: 05/04/2004, 19h47

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