TSQL - 将价格调整为 0.05 和 0.09。 UPDATE 正在产生 NULL?
Posted
技术标签:
【中文标题】TSQL - 将价格调整为 0.05 和 0.09。 UPDATE 正在产生 NULL?【英文标题】:TSQL - ROUND price to .05 and .09. UPDATE is producing NULLs? 【发布时间】:2012-09-04 20:15:29 【问题描述】:我有一张桌子,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,因为不应该有任何其他条件。
谢谢,
马歇尔
【问题讨论】:
一定有像 1.255 或 1.295 这样的价格跌破裂缝。 @YuxiuLi - 就是这样。谢谢。 【参考方案1】:对于以 0.05
UPDATE PriceTable
SET Price = ROUND(Price,1,2) +
CASE
WHEN Price -(ROUND(Price,1,2)) BETWEEN .00 AND .05 THEN .05
ELSE .09
END;
【讨论】:
效果很好。 0.05 和 0.06 之间的值是有问题的值。感谢您的帮助和快速响应。以上是关于TSQL - 将价格调整为 0.05 和 0.09。 UPDATE 正在产生 NULL?的主要内容,如果未能解决你的问题,请参考以下文章
如何调整/选择 AffinityPropagation 的偏好参数?