18

product_idフィールド(大きな整数) を持つMySQLテーブルがあります

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 )

4

6 に答える 6

39

DIV演算子を使用します。

mysql> SELECT 5 DIV 2;
    -> 2

整数除算。FLOOR() に似ていますが、BIGINT 値を使用しても安全です。BIGINT の範囲を超える非整数オペランドでは、誤った結果が生じる可能性があります。

于 2013-06-18T15:23:11.497 に答える
9
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  
";
于 2012-06-29T14:08:40.773 に答える
3
SELECT * 
  FROM `product` 
 WHERE `product_id` >= 1103010000 
   AND `product_id` <= 1103019999
于 2012-06-29T14:08:16.210 に答える
2

次のように、MySQL 整数除算演算子DIVを使用できます。

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

BIGINTにも安心。

于 2013-01-02T22:34:50.943 に答える
2

MySQLのドキュメントでは、LIKEインデックスも使用していると記載されているため、次も使用できると思います。

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

編集:次のような結果になるため、使用する必要がある独自のクエリを修正するにはFLOOR()documentation ):

1103010006 / 10000

結果は 110301,0006 であり、等しくない110301

于 2012-06-29T14:11:20.620 に答える
1

MYSQL Documentationは、これが発生する理由を説明していると思います。

除算は、結果が整数に変換されるコンテキストで実行される場合にのみ、BIGINT 算術で計算されます。

したがって、結果を整数に変換すると、うまくいく可能性があります。

編集: 試してください

SELECT * FROM `product` WHERE cast((product_id/10000) as int) = 110301  
于 2012-06-29T14:55:25.190 に答える