Bonjour à tous.
J’essaie de vous présenter la situation : j’ai une table listant l’ensemble des devises monétaires.
Le symbole de la devise est un varchar(3) issu d’une norme officielle.
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;
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.
Mon problème se situe à la consultation, lorsque j’effectue :
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');
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)
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)
Bon, admettons…mais là où je ne comprends pas c’est lorsque j’effectue :
Il me renvoie à nouveau ces deux mêmes lignes ! On a l’impression qu’il ne prend pas en compte le LENGTH.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT libelleDevise FROMdevises WHERE symboleDevise = AND LENGTH(symboleDevise) = 3;
Alors que :
me renvoie bien uniquement la ligne multi-devises.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT * FROM devises WHERE LENGTH(symboleDevise) = 3;
Seul moyen d’obtenir le résultat que j’attends :
il me renvoie bien uniquement la ligne multi-devises
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;
Voilà, si quelqu’un pouvait m’expliquer la subtilité…
Merci
NB : version 5.0 de mySQL server.
Partager