テーブルに float 型の列があります。
1 つの値または値の配列を取得して列の 1 つと比較し、その値を含むか値の配列に存在するすべての行を返すクエリがあります。
1 つの値を比較するとき、mysql の float は等号を使用して比較できないため、LIKE 句を使用します。
ただし、値の配列と比較する場合は、IN 句を使用しますが、これは機能しません。
IN 句を使用してフロートを比較するにはどうすればよいですか?
テーブルに float 型の列があります。
1 つの値または値の配列を取得して列の 1 つと比較し、その値を含むか値の配列に存在するすべての行を返すクエリがあります。
1 つの値を比較するとき、mysql の float は等号を使用して比較できないため、LIKE 句を使用します。
ただし、値の配列と比較する場合は、IN 句を使用しますが、これは機能しません。
IN 句を使用してフロートを比較するにはどうすればよいですか?
float データの比較に関する問題は、「等号を使用して比較できない」という問題ではありません。問題は、すべての float 値が概算であり、= 演算子は概算を行わず、正確な等値のみを行うことです。同じことが IN 演算子にも当てはまります。
float 比較を処理するほとんどの人は、次のようなものを使用します。
value BETWEEN target-epsilon AND target+epsilon
ここで、epsilon は 0.0001 のようなものです。
したがって、
value IN (target1, target2, target3)
確実に機能させるのは難しいです。float値にどのような数値を隠しているかについては何も言及していません。しかし、それらが次のような緯度の値であるとしましょう: 42.79842367778193. ここで明らかに、42.7984237 は十分に近く、ここでは等しいと見なされます。
だからこんなこともできる。
CAST(10000.0 * latitude AS INT) IN
(CAST(10000.0 * 42.7984237 AS INT), CAST(10000.0 * 43.1234567 AS INT))