perl-DBI中十进制值之间的近似选择

时间:2015-04-22 06:56:11

标签: mysql

我是使用此查询开发的数据库表

create table test(
  id varchar(10),
  alpha varchar(1000),
  marks decimal(10,4)
);

marks中应使用decimal数据类型。

marks column
1100.2523
1100.2722
733.8375
1192.257
587.6248
392.0859

我应该用来选择查询

select * from test where marks="1100.2625";

select * from test where marks="392.0252";

输出为Empty set (0.00 sec)

预期输出

1100.2523 1100.2722 and 392.0859 this rows.

如果可以在十进制范围之间选择。?

1 个答案:

答案 0 :(得分:1)

这通常不可能使用查询,因此您需要为近似定义基准。

现在,如果你为近似设置了一个基准标记,那么就把它说成是

  1. 如果标记和比较值相同,则舍入到第一个小数点,则匹配。
  2. 如果后舍入到第一个小数点后标记和输入并取差值,则值为1-1,则匹配。
  3. 使用上述基准可以做到。

    考虑下表

    mysql> select * from test ;
    +------+-------+-----------+
    | id   | alpha | marks     |
    +------+-------+-----------+
    | 1    | aa    | 1100.2523 |
    | 2    | bb    | 1100.2722 |
    | 3    | cc    |  392.0859 |
    +------+-------+-----------+
    
    
    mysql> select * from test where round(marks,1) = round(1100.2625,1);
    +------+-------+-----------+
    | id   | alpha | marks     |
    +------+-------+-----------+
    | 1    | aa    | 1100.2523 |
    | 2    | bb    | 1100.2722 |
    +------+-------+-----------+
    
    
    mysql> select * from test 
    where round(marks,1) = round(392.0252,1) 
    or round(marks,1) - round(392.0252,1) = 0.1 
    or round(marks,1) - round(392.0252,1) = -0.1; 
    +------+-------+----------+
    | id   | alpha | marks    |
    +------+-------+----------+
    | 3    | cc    | 392.0859 |
    +------+-------+----------+