2009-07-31 8 views
1

Sur un serveur, j'utilise mysql version 5.0.45 et lors de l'exécution de la requête suivante, il renvoie 1 si boolvalue = 'True' ET 2.2 sinon, comme il se doit.Mysql Case renvoie une valeur erronée

SELECT Q.value 
FROM (
SELECT (CASE table.boolvalue='True' WHEN 1 THEN 1 ELSE 2.2 END) AS value FROM table 
) Q; 

Sur un autre serveur (hébergement web) J'utilise la version MySQL 5.0.22 et lors de l'exécution de la même requête, il retourne toujours 0,9999, pourquoi ?!

Mais en utilisant cette requête, il renvoie le résultat comme il se doit:

SELECT (CASE table.boolvalue='True' WHEN 1 THEN 1 ELSE 2.2 END) AS value FROM table 

je dois utiliser la sous-requête que la requête fait aussi d'autres choses, juste tombé en panne pour vous montrer où l'erreur est. S'il vous plaît quelqu'un peut-il m'expliquer cela?

Répondre

1

Il peut s'agir d'une erreur floating point. Essayez de coller ROUND() devant votre numéro pour résoudre le problème

0

Cela pourrait être un bug. 5.0.22 est très vieux, après tout. Soit dit en passant, vous devriez être en mesure de simplifier votre cas

SELECT (CASE WHEN table.boolvalue='True' THEN 1 ELSE 2.2 END) AS value FROM table 

Ou même simplement utiliser IF()

SELECT IF(table.boolvalue='True', 1, 2.2) AS value FROM table 
Questions connexes