SQL字段类型字段不显示

时间:2011-10-12 06:41:13

标签: php mysql sql

enter image description here我有一个MySQL表,其中一个字段是variation,类型是float。它的值是0.2。但是当我查询WHERE variation = '0.2'时它没有显示结果,而是返回null。我做错了什么?

SELECT * FROM tbl_products
  WHERE frequency BETWEEN '2' AND '3'
    AND gain = '2'
    AND gain_variation = '0.2'
    AND noise = '2'
    AND power = '10'

4 个答案:

答案 0 :(得分:3)

再次删除号码周围的引号。

例如WHERE variation = 0.2

编辑:正如Peeka指出的那样,引用在MySQL中并不重要。

你是否绝对确定浮点数的值是0.2并且没有有效的数字被舍入?您可以尝试使用BETWEEN 0.19 AND 0.21并查看您之后的行是否返回(我知道它不是一个等效的查询,可能会返回不需要的结果,但它会测试该值是否正好为0.2或者是否在客户端中舍入)。

编辑2 :我打赌它是因为MySQL存储浮动的方式 - 取自他们的手册:

  

浮点数有时会引起混淆,因为它们是近似值而不是存储为精确值。 SQL语句中写入的浮点值可能与内部表示的值不同。

有关详细信息,请参阅此处:http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html

建议使用范围来过滤而不是相等,所以如果你使用BETWEEN 0.19 AND 0.21,你会得到你想要的结果吗?

答案 1 :(得分:1)

根据有关@ mwan答案的讨论,请考虑在此字段中使用INT而不是FLOAT。当你INSERT行时,你可以乘以10的某个幂(取决于你需要的精度水平),当你SELECT时你可以除以10的相同幂,但是因为字段是INT,您始终可以确信您的WHERE子句与正确的行匹配:

CREATE TABLE `tbl_products` (
  frequency             INT,
  gain                  INT,
  gain_variation_x100   INT,  # give it a name that will remind you
  noise                 INT,
  power                 INT
);

INSERT INTO `tbl_products` VALUES
  ('1', '2', '0.2' * 100, '2', '10'),
  ('2', '2', '0.2' * 100, '2', '10'),
  ('2', '2', '0.5' * 100, '2', '10')
  #                ↑
  #                 `---- multiply here
;

SELECT *, ROUND(gain_variation_x100 / 100, 1) AS gain_variation
  FROM tbl_products  #              ^---.  ^---- show 1 digit of precision
  WHERE frequency BETWEEN '2' AND '3' #  \
    AND gain = '2'                    #   `----- divide here
    AND gain_variation_x100 = ROUND('0.2' * 100)
    AND noise = '2'  #                    ^----- multiply here
    AND power = '10'
;

你可以在这里看到这个:http://sqlize.com/829275n1Fc

答案 2 :(得分:0)

试;  to_char(变体)='0.2'

请检查此链接,这可能会有所帮助:

Selecting a float in MySQL

答案 3 :(得分:0)