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 的偏好参数?

TSQL语句基础

SQL 限制平均值

AudioQueueNewInput 回调延迟

TSQL:如何将本地时间转换为 UTC? (SQL Server 2008)

将 PL/SQL 定义转换为 TSQL