Целочисленное деление в MySQL
у меня есть таблица 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 ответов
документация MySQL говорит, что LIKE
также использует индексы, поэтому я думаю, что вы также можете использовать:
SELECT *
FROM `product`
WHERE product_id LIKE '110301____' -- four undersores as biziclop suggested
edit: исправить свой запрос, вы должны использовать FLOOR()
(документация) потому что это приводит к чему-то вроде:
1103010006 / 10000
что приводит к 110301,0006, и это не равно 110301
использовать DIV
оператор.
mysql> SELECT 5 DIV 2;
-> 2
целочисленное деление. Подобно FLOOR (), но безопасен со значениями BIGINT. Неправильные результаты могут возникнуть для неинтегрированных операндов, превышающих диапазон BIGINT.
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
";
вы можете использовать MySQL Integer division operator DIV такой:
SELECT * FROM `product` WHERE (product_id DIV 10000)=110301
также безопасно для BIGINT.
документация MYSQL, Я думаю, объясняет, почему это происходит;
деление вычисляется с помощью арифметики BIGINT, только если выполняется в контекст, в котором его результат преобразуется в целое число.
поэтому, если вы преобразуете результат в целое число, он может работать.
Edit: Попробуй!--4-->
SELECT * FROM `product` WHERE cast((product_id/10000) as int) = 110301