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

Requêtes MySQL Discussion :

champs composés d'espaces


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Par défaut champs composés d'espaces
    Bonjour à tous.

    J’essaie de vous présenter la situation : j’ai une table listant l’ensemble des devises monétaires.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE devises (
      iddevise INTEGER UNSIGNED NOT NULL,
      symboleDevise VARCHAR(3) NOT NULL,
      libelleDevise VARCHAR(50) NOT NULL,
      PRIMARY KEY(iddevise)
    )
    TYPE=InnoDB;
    Le symbole de la devise est un varchar(3) issu d’une norme officielle.
    Cependant ma base de données est alimentée par différentes sources et notamment un fichier texte n’utilisant pas cette norme où 1 espace représente par défaut le symbole du franc et 3 espaces représente un montant multi-devise.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO devises (iddevise, symboleDevise, libelleDevise)
      VALUES (1, ' ', 'francs');
    INSERT INTO devises (iddevise, symboleDevise, libelleDevise)
      VALUES (2, '   ', 'multi-devises');
    Mon problème se situe à la consultation, lorsque j’effectue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT libelleDevise FROMdevises
    WHERE symboleDevise = ‘ ’ ; (avec un seul espace ce qui attend comme retour francs)
    Il me renvoie la ligne francs mais aussi la ligne multi-devises. (Même chose si je mets trois espaces qui attend comme retour multi-devises)

    Bon, admettons…mais là où je ne comprends pas c’est lorsque j’effectue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT libelleDevise FROMdevises
    WHERE symboleDevise = ‘ ’
       AND LENGTH(symboleDevise) = 3;
    Il me renvoie à nouveau ces deux mêmes lignes ! On a l’impression qu’il ne prend pas en compte le LENGTH.
    Alors que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM devises
    WHERE LENGTH(symboleDevise) = 3;
    me renvoie bien uniquement la ligne multi-devises.

    Seul moyen d’obtenir le résultat que j’attends :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT *
    FROM devises
    WHERE idDevise IN (SELECT idDevise FROM devises WHERE symboleDevise = '')
      AND LENGTH(symboleDevise) = 3;
    il me renvoie bien uniquement la ligne multi-devises

    Voilà, si quelqu’un pouvait m’expliquer la subtilité…

    Merci

    NB : version 5.0 de mySQL server.

  2. #2
    Membre chevronné Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Par défaut
    slt.


    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    SELECT libelleDevise FROMdevises
    WHERE symboleDevise = ‘ ’
       AND LENGTH(symboleDevise) = 3;
    utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    SELECT libelleDevise FROMdevises
    WHERE symboleDevise like  "   ";

    mais faire des tests sur la longueurs des champs, qui sont a espaces, je sais pas si tu n´iras pas avoir des problemes avec ca.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Par défaut
    Citation Envoyé par jota5450
    slt.
    utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    SELECT libelleDevise FROMdevises
    WHERE symboleDevise like  "   ";
    mais faire des tests sur la longueurs des champs, qui sont a espaces, je sais pas si tu n´iras pas avoir des problemes avec ca.

    c'est parfait, ça fonctionne, merci jota5450.

    Cependant, quelqu'un aurait une explication sur l'incohérence des résultats ?

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

Discussions similaires

  1. Format champ : pas d espace suffisant sur le disque
    Par Access68 dans le forum Modélisation
    Réponses: 4
    Dernier message: 31/10/2007, 15h49
  2. Compléter un champ avec des espaces
    Par milka dans le forum SQL
    Réponses: 1
    Dernier message: 22/10/2007, 11h04
  3. Réponses: 3
    Dernier message: 23/01/2007, 08h14
  4. Réponses: 1
    Dernier message: 18/05/2006, 09h11
  5. nom de table et de champs avec des espaces
    Par grinder59 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/05/2006, 17h30

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