Не удается получить предложение WHERE для значения с плавающей запятой - PullRequest
2 голосов
/ 07 мая 2011

У меня в таблице есть значение с плавающей запятой 4,3.

При отправке запроса:

SELECT * FROM mytable WHERE floatfield = 4.3

возвращает пустой результат.

Даже при попытке;

SELECT * FROM mytable WHERE floatfield = '4.3'

В чем проблема?

Ответы [ 3 ]

4 голосов
/ 07 мая 2011

Плавающая точка не имеет бесконечной точности , и 4.3 не может быть точно представлено конечным числом двоичных цифр.

2 голосов
/ 25 августа 2011

Используйте Column LIKE float вместо Column = float. Не используйте терминологию, стоящую за этим, она, вероятно, просто совпадает с началом значения или вырежет невидимую прецизионную цифру и относится к ней как к varchar.

0 голосов
/ 30 августа 2013

Вы можете использовать следующую функцию:

DELIMITER $$
DROP FUNCTION IF EXISTS `x_cast_to_float`$$
CREATE FUNCTION `x_cast_to_float`(number FLOAT) RETURNS FLOAT
    NO SQL
    BEGIN
        RETURN number;
    END$$
DELIMITER ;

SELECT * FROM mytable WHERE floatfield = x_cast_to_float(4.3)<br />
...