SQLアンチパターンを読み始めたので、1つ1つ書いてのメモです
目的
- 目的:整数の代わりに小数値を使用する
アンチパターン
- FLOAT データ型を使用する
- 丸めが避けられない
- 0.333.. のような循環少数がある
- 有限精度となる
SELECT * FROM Accounts WHERE hourly_rate = 59.95;
-- 一致する行はない。59.95 は、59.950000762939 として格納されているから
浮動小数点数の誤差累積の影響は、和ではなく、積を計算する場合にさらに大きくなります
用いてもいいパターン
科学技術計算を行うアプリケーション
解決策
- NUMERIC 、DECIMAL データ型を使用する
ALTER TABLE Bugs ADD COLUMN hours NUMERIC(9,2);
ALTER TABLE Accounts ADD COLUMN hourly_rate NUMERIC(9,2);
まとめ
- 正確な 10 進数値が必要な場合は、NUMERIC を使う
- できる限り、FLOAT 型は使わないようにしましょう。
感想
- float 使ってた...