我有一张桌子,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 语句将正确的 0.05 或 0.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,因为不应该有任何其他条件。
谢谢,
马歇尔