MySQL中的整数除法

时间:2012-06-29 14:05:58

标签: mysql sql select sqldatatypes

我有一个MySQL表,其中有一个product_id字段(大整数)

  

1102330008   1102330025   1102330070   1103010009   1103010010   1103020006   ...

我想选择product_id = 110301****的行。我试图使用这个查询:

SELECT * FROM `product` WHERE (product_id/10000)=110301  

但它不会返回任何带有此消息的值:

  

MySQL returned an empty result set (i.e. zero rows). ( Query took 0.0005 sec )

6 个答案:

答案 0 :(得分:21)

使用DIV operator

mysql> SELECT 5 DIV 2;
    -> 2
  

整数除法。与FLOOR()类似,但BIGINT值是安全的。对于超出BIGINT范围的非整数操作数,可能会出现不正确的结果。

答案 1 :(得分:8)

SELECT *
FROM product
WHERE product_id BETWEEN 1103010000
                     AND 1103019999  

如果要在PHP中创建查询,则可以构建类似

的查询
$sql = "
    SELECT *
    FROM product
    WHERE product_id BETWEEN {$product_id_range}0000
                         AND {$product_id_range}9999  
";

答案 2 :(得分:3)

SELECT * 
  FROM `product` 
 WHERE `product_id` >= 1103010000 
   AND `product_id` <= 1103019999

答案 3 :(得分:3)

MySQL documentationLIKE也使用索引,所以我认为你也可以使用:

SELECT *
FROM `product`
WHERE product_id LIKE '110301____' -- four undersores as biziclop suggested

修改以修复您自己的查询,您需要使用FLOOR()documentation),因为它会产生类似的结果:

1103010006 / 10000

结果为110301,0006,并且不等于110301

答案 4 :(得分:2)

您可以像这样使用MySQL整数除法运算符DIV

SELECT * FROM `product` WHERE (product_id DIV 10000)=110301

对于BIGINT也是安全的。

答案 5 :(得分:1)

我认为

MYSQL Documentation解释了为什么会发生这种情况;

  

除非在a中执行,否则使用BIGINT算法计算除法   上下文,其结果转换为整数。

因此,如果将结果转换为整数,则可能有效。

修改 试试

SELECT * FROM `product` WHERE cast((product_id/10000) as int) = 110301