MySQL 選択における浮動小数点の不一致の解決
浮動小数点値を定数と比較する WHERE 句を含む SELECT ステートメントを実行する場合、ユーザーは予期しない結果に遭遇する可能性があります。たとえば、次のクエリは行を返しません:
<code class="sql">SELECT * FROM `table` WHERE `ident`='ident23' AND `price`='101.31';</code>
ただし、価格比較条件を削除すると正しい行が得られます:
<code class="sql">SELECT * FROM `table`;</code>
この矛盾は、MySQL の処理方法に起因すると考えられます。浮動小数点精度。データベースから取得した値は「101.31」と表示されますが、浮動小数点演算の不正確さにより、WHERE 句で使用される実際の定数とは若干異なる場合があります。
解決策: DECIMAL へのキャスト
この問題を解決するには、WHERE 句で価格列を DECIMAL 型にキャストできます。
<code class="sql">SELECT * FROM `table` WHERE CAST(price AS DECIMAL) = CAST(101.31 AS DECIMAL);</code>
これにより、データベース値と定数の両方が DECIMAL として表現されるようになります。潜在的な精度の問題を排除します。
代替解決策: 列の型を変更する
代わりに、価格列のデータ型を DECIMAL に直接変更することを検討してください。 DECIMAL を使用すると、通貨値を操作する際の精度とスケールが向上し、SELECT クエリでのキャストの必要がなくなります。
以上が浮動小数点値を定数と比較すると、MySQL SELECT ステートメントが行を返さないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。