首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL字段类型字段未显示

SQL字段类型字段未显示
EN

Stack Overflow用户
提问于 2011-10-12 14:41:13
回答 3查看 55关注 0票数 0

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

代码语言:javascript
复制
SELECT * FROM tbl_products
  WHERE frequency BETWEEN '2' AND '3'
    AND gain = '2'
    AND gain_variation = '0.2'
    AND noise = '2'
    AND power = '10'
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-12 14:43:04

请删除数字两边的引号,然后重试。

例如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,你能得到你想要的结果吗?

票数 3
EN

Stack Overflow用户

发布于 2011-10-12 15:18:46

根据对@mwan答案的讨论,请考虑对此字段使用INT而非FLOAT。当您对一行执行INSERT操作时,您可以将其乘以10的某个幂(取决于所需的精度级别),而当您执行SELECT操作时,您可以将其除以相同的10次方,但是由于字段是一个INT,因此您可以始终确信您的WHERE子句将匹配正确的行:

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2011-10-12 15:11:17

这就解释了

http://dev.mysql.com/doc/refman/5.0/en/precision-math-examples.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7736207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档