Знам, че SQL 92 е стар стандарт, но съм почти сигурен, че това не е променено в по-новите стандартни версии на SQL.
SQL 92 дефинира
Въпросът е:0.1
и 0.2
в заявката SELECT 0.1 + 0.2
приблизително или точно?
Отговорът е:вие не знаете и базата данни не може да знае.
Така че базата данни ще изпълни внедряването, дефинирано за MySQL и MariaDB двигатели, което изглежда ще се обработва като DECIMAL(1,1)
типове данни
Защо отговорът на Ник връща правилните стойности или очакваните с дефиниция на таблица
SQL 92 също дефинира
Което Ник направи, като дефинира типа данни в таблицата.
Редактирах този отговор, защото днес намерих нещо в ръководството на MySQL.
Заявката
SELECT (0.1 + 0.2) = 0.3
Резултати в 1
в MySQL, което означава, че MySQL използва точно числово изчисление и използва Прецизна математика
където е възможно. Така че MySQL знае, че 0.1
, 0.2
и 0.3
са точни типове данни тук и трябва да изчисли точно, както очаквах преди тази редакция.
Имайки предвид заявката
SELECT (0.1 + 0.2) = 0.3
ще работи под капака повече или по-малко като
SELECT CAST((0.1 + 0.2) AS DECIMAL(1, 1)) = CAST((0.3) AS DECIMAL(1, 1));