私はテーブル、PriceTableを持っています、
列UPC(int)、Price(money)
価格列のすべてのセントを丸めて、.x5または.x9で終了しようとしています。
価格の最後の桁が0〜5の場合、最後の桁は5になります。
価格の最後の桁が6〜9の場合、最後の桁は9になります。
例
- 1.00は1.05になります
- 1.21は1.25になります
- 1.26は1.29になります
以下を使用していますが、更新後、価格がNULLに更新されているレコードがいくつか取得され、その理由がわかりません。データの95%で正しく機能していますが、そうでないデータでは何も違いは見られません。
私の考えでは、(Round(Price、1,2)は価格にドルを与えます。全体の価格からそれを引いてセントを取得し、CASEステートメントを使用して正しい.05または.09を価格に戻します。
UPDATE PriceTable
SET Price = ROUND(Price,1,2) +
CASE
WHEN Price -(ROUND(Price,1,2)) BETWEEN .00 AND .05 THEN .05
WHEN Price -(ROUND(Price,1,2)) BETWEEN .06 AND .09 THEN .09
END;
これを行うためのより良い方法はありますか?すべてのセントシナリオを考慮する必要があるのに、なぜ価格がNULLになるのか、頭を悩ませることはできません。そうでない場合でも、ROUND(Price、1,2)でドルの価格を取得する必要があります。 )。他の条件はないはずなので、ELSEは必要ありません。
ありがとう、
マーシャル