Heim > Datenbank > MySQL-Tutorial > Warum gibt meine MySQL-SELECT-Anweisung beim Vergleich eines Float-Werts mit einer Konstante keine Zeilen zurück?

Warum gibt meine MySQL-SELECT-Anweisung beim Vergleich eines Float-Werts mit einer Konstante keine Zeilen zurück?

DDD
Freigeben: 2024-10-29 10:51:02
Original
499 Leute haben es durchsucht

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

Auflösen von Gleitkomma-Diskrepanzen in MySQL-Auswahlen

Beim Ausführen einer SELECT-Anweisung mit einer WHERE-Klausel, die einen Gleitkommawert mit einer Konstante vergleicht, Benutzer können auf unerwartete Ergebnisse stoßen. Die folgende Abfrage gibt beispielsweise keine Zeilen zurück:

<code class="sql">SELECT * FROM `table` WHERE `ident`='ident23' AND `price`='101.31';</code>
Nach dem Login kopieren

Das Entfernen der Preisvergleichsbedingung ergibt jedoch die richtige Zeile:

<code class="sql">SELECT * FROM `table`;</code>
Nach dem Login kopieren

Diese Diskrepanz kann auf die Art und Weise zurückgeführt werden, wie MySQL damit umgeht Gleitkomma-Präzision. Während der aus der Datenbank abgerufene Wert „101,31“ anzeigt, kann er aufgrund von Ungenauigkeiten in der Gleitkomma-Arithmetik geringfügig von der tatsächlich in der WHERE-Klausel verwendeten Konstante abweichen.

Lösung: Umwandlung in DECIMAL

Um dieses Problem zu lösen, kann man die Preisspalte in der WHERE-Klausel in den Typ DECIMAL umwandeln:

<code class="sql">SELECT * FROM `table` WHERE CAST(price AS DECIMAL) = CAST(101.31 AS DECIMAL);</code>
Nach dem Login kopieren

Dadurch wird sichergestellt, dass sowohl der Datenbankwert als auch die Konstante als DECIMALs dargestellt werden. Dadurch werden potenzielle Präzisionsprobleme beseitigt.

Alternative Lösung: Spaltentyp ändern

Als Alternative können Sie erwägen, den Datentyp der Preisspalte direkt in DECIMAL zu ändern. DECIMAL bietet eine höhere Präzision und Skalierbarkeit bei der Arbeit mit Geldwerten, sodass keine SELECT-Abfragen eingegeben werden müssen.

Das obige ist der detaillierte Inhalt vonWarum gibt meine MySQL-SELECT-Anweisung beim Vergleich eines Float-Werts mit einer Konstante keine Zeilen zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage