1

私は次の文でmysqlからいくつかの値を選択しようとしています:

SELECT 
  id, lead_id, form_id, field_number, value 
FROM 
  wp_rg_lead_detail 
WHERE 
  field_number IN (6.3, 6.6, 11, 12, 17, 14) 
ORDER BY 
  lead_id, field_number

フィールドfield_numberはfloatであり、selectは11、12、17、および14フィールドのみをリストしていますが、6.3および6.6の値はリストしていません。

文の何が問題になっていますか?

ありがとう。

4

2 に答える 2

4

その理由は、6.3 と 6.6 が実際にはテーブルに格納されていないためです。コンピュータは、ほとんどの小数値を完全に表現することはできません。格納された値を 6.3 または 6.6 と比較すると、一致するように見えても一致しません。違いは、通常は表示されない小数点第 9 位または第 10 位にある可能性があります。

http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html

値を正確に比較する必要がある場合は、整数または小数にします。小数点以下の数値が 1 つしかない場合は、たとえば、すべての値に 10 を掛けて整数のみを処理できます。

于 2012-08-28T23:23:40.043 に答える
1

クエリに問題はありません。問題は、float正確な型ではないことです。代わりに使用decimalします(またはクエリを次のように変更します... WHERE (field_number BETWEEN 6.2999 AND 6.3001) OR (field_number BETWEEN 6.5999 AND 6.6001 OR ()...

于 2012-08-28T23:28:26.750 に答える