Целочисленное деление в 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  
";

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

вы можете использовать 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