Vím, že SQL 92 je starý standard, ale jsem si jistý, že se to v novějších standardních verzích SQL nezměnilo.
SQL 92 definuje
Otázka zní:0.1
a 0.2
v dotazu SELECT 0.1 + 0.2
přibližné nebo je to přesné?
Odpověď zní:nevíte, ani databáze nemůže vědět.
Databáze tedy poběží implementaci definovanou pro motory MySQL a MariaDB, která se zdá být zpracována jako DECIMAL(1,1)
datové typy
Proč Nickova odpověď vrací správné hodnoty nebo očekávané hodnoty s definicí tabulky
SQL 92 také definuje
Což Nick udělal definováním datového typu v tabulce.
Upravil jsem tuto odpověď, protože jsem dnes něco našel v příručce MySQL.
Dotaz
SELECT (0.1 + 0.2) = 0.3
Výsledky do 1
v MySQL, což znamená, že MySQL používá přesné numerické výpočty a používá Přesná matematika
kde je to možné. Takže MySQL ví, že 0.1
, 0.2
a 0.3
jsou zde přesné datové typy a je třeba je přesně vypočítat, jak jsem před touto úpravou očekával.
Význam dotazu
SELECT (0.1 + 0.2) = 0.3
poběží pod kapotou víceméně jako
SELECT CAST((0.1 + 0.2) AS DECIMAL(1, 1)) = CAST((0.3) AS DECIMAL(1, 1));