我有一个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 )
答案 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 documentation说LIKE
也使用索引,所以我认为你也可以使用:
SELECT *
FROM `product`
WHERE product_id LIKE '110301____' -- four undersores as biziclop suggested
修改以修复您自己的查询,您需要使用FLOOR()
(documentation),因为它会产生类似的结果:
1103010006 / 10000
结果为110301,0006,并且不等于110301
答案 4 :(得分:2)
答案 5 :(得分:1)
MYSQL Documentation解释了为什么会发生这种情况;
除非在a中执行,否则使用BIGINT算法计算除法 上下文,其结果转换为整数。
因此,如果将结果转换为整数,则可能有效。
修改强> 试试
SELECT * FROM `product` WHERE cast((product_id/10000) as int) = 110301