Ich weiß, dass SQL 92 ein alter Standard ist, aber ich bin mir ziemlich sicher, dass dies in den neueren SQL-Standardversionen nicht geändert wird.
SQL 92 definiert
Die Frage lautet:0.1
und 0.2
in der Abfrage SELECT 0.1 + 0.2
ungefähr oder genau?
Die Antwort lautet:Sie wissen es nicht, auch die Datenbank kann es nicht wissen.
Die Datenbank wird also die Implementierung ausführen, die für MySQL- und MariaDB-Engines definiert ist. Dies scheint als DECIMAL(1,1)
behandelt zu werden Datentypen
Warum gibt Nicks Antwort die richtigen oder erwarteten Werte mit einer Tabellendefinition zurück
SQL 92 definiert auch
Was Nick getan hat, indem er den Datentyp in der Tabelle definiert hat.
Diese Antwort wurde bearbeitet, weil ich heute etwas im MySQL-Handbuch gefunden habe.
Die Abfrage
SELECT (0.1 + 0.2) = 0.3
Ergibt 1
in MySQL, was bedeutet, dass MySQL eine exakte numerische Berechnung verwendet und verwendet Präzisionsmathematik
wo möglich. MySQL kennt also 0.1
, 0.2
und 0.3
sind hier genaue Datentypen und müssen genau berechnet werden, wie ich es vor dieser Bearbeitung erwartet hatte.
Gemeint ist die Abfrage
SELECT (0.1 + 0.2) = 0.3
wird mehr oder weniger wie
unter der Haube laufenSELECT CAST((0.1 + 0.2) AS DECIMAL(1, 1)) = CAST((0.3) AS DECIMAL(1, 1));