Maison > base de données > tutoriel mysql > Pourquoi mon instruction MySQL SELECT ne renvoie-t-elle aucune ligne lors de la comparaison d'une valeur flottante à une constante ?

Pourquoi mon instruction MySQL SELECT ne renvoie-t-elle aucune ligne lors de la comparaison d'une valeur flottante à une constante ?

DDD
Libérer: 2024-10-29 10:51:02
original
505 Les gens l'ont consulté

Why Does My MySQL SELECT Statement Return No Rows When Comparing a Float Value to a Constant?

Résolution des écarts à virgule flottante dans les sélections MySQL

Lors de l'exécution d'une instruction SELECT avec une clause WHERE qui compare une valeur flottante à une constante, les utilisateurs peuvent rencontrer des résultats inattendus. Par exemple, la requête suivante ne renvoie aucune ligne :

<code class="sql">SELECT * FROM `table` WHERE `ident`='ident23' AND `price`='101.31';</code>
Copier après la connexion

Cependant, la suppression de la condition de comparaison de prix donne la ligne correcte :

<code class="sql">SELECT * FROM `table`;</code>
Copier après la connexion

Cet écart peut être attribué à la façon dont MySQL gère précision en virgule flottante. Bien que la valeur extraite de la base de données indique « 101,31 », elle peut différer légèrement de la constante réelle utilisée dans la clause WHERE en raison d'inexactitudes arithmétiques à virgule flottante.

Solution : conversion en DECIMAL

Pour résoudre ce problème, on peut convertir la colonne prix en type DECIMAL dans la clause WHERE :

<code class="sql">SELECT * FROM `table` WHERE CAST(price AS DECIMAL) = CAST(101.31 AS DECIMAL);</code>
Copier après la connexion

Cela garantit que la valeur de la base de données et la constante sont représentées sous forme DECIMAL, éliminant tout problème de précision potentiel.

Solution alternative : changer le type de colonne

Comme alternative, envisagez de modifier directement le type de données de la colonne de prix en DECIMAL. DECIMAL offre une plus grande précision et une plus grande échelle lorsque vous travaillez avec des valeurs monétaires, éliminant ainsi le besoin de conversion dans les requêtes SELECT.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal