MySQL中的整数除法

bij*_*uji 12 mysql sql select sqldatatypes

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

1102330008 1102330025 1102330070 1103010009 1103010010 1103020006 ...

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

SELECT * FROM `product` WHERE (product_id/10000)=110301  
Run Code Online (Sandbox Code Playgroud)

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

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

dje*_*lin 25

使用DIV运营商.

mysql> SELECT 5 DIV 2;
    -> 2
Run Code Online (Sandbox Code Playgroud)

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

  • 不像FLOOR(),而是TRUNCATE()。例如:`select -5 div 2,floor(-5 / 2);`您将得到`-2,-3` (2认同)

biz*_*lop 8

SELECT *
FROM product
WHERE product_id BETWEEN 1103010000
                     AND 1103019999  
Run Code Online (Sandbox Code Playgroud)

如果你想用PHP创建你的查询,那么你可以构建你的查询

$sql = "
    SELECT *
    FROM product
    WHERE product_id BETWEEN {$product_id_range}0000
                         AND {$product_id_range}9999  
";
Run Code Online (Sandbox Code Playgroud)


Ten*_*eff 2

MySQL 文档说它LIKE也使用索引,所以我认为你也可以使用:

SELECT *
FROM `product`
WHERE product_id LIKE '110301____' -- four undersores as biziclop suggested
Run Code Online (Sandbox Code Playgroud)

编辑:要修复您自己的查询,您需要使用FLOOR()文档),因为它的结果如下:

1103010006 / 10000
Run Code Online (Sandbox Code Playgroud)

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