Порівняння дрібних значень (float) в MySQL

Опубліковано:

При запитах в MySQL пов’язані з порівнянням дробових чисел (наприклад, float) іноді виникають проблеми, що через особливості архітектури обчислювальної техніки пряме порівняння не працює. Детальніше про залежність порівняння чисел з крапкою та обчислювальної техніки ви можете знайти і прочитати в інтернеті, а зараз спробуємо вирішити дану задачу за допомогою стандартних засобів MySQL.

Уявімо, що у нас є таблиця з певною колонкою “column_x” з типом “float”, де зберігаються деякі дробові значення. Нам потрібно з цієї таблиці вибрати всі записи рівні певному значенню в цій колонці, наприклад «1.678».

SELECT 
    *
FROM 
    `table_test`
WHERE
    CAST(`column_x` AS CHAR) = 1.678

Тобто, виходячи із запиту вище ми бачимо, що використовуємо стандартну функцію «CAST», яка перетворює один тип в інший, що власне в даному випадку і потрібно. Що найцікавіше, так це те, що з даною конструкцією можна порівнювати дробові значення як безпосередньо “=”, так і з операторами “>”, “<“, “>=”, “<=”.