Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TSQL-四舍五入到0.05和0.09的价格。更新正在生成空值?_Sql_Sql Server 2008_Tsql_Sql Server 2005 - Fatal编程技术网

TSQL-四舍五入到0.05和0.09的价格。更新正在生成空值?

TSQL-四舍五入到0.05和0.09的价格。更新正在生成空值?,sql,sql-server-2008,tsql,sql-server-2005,Sql,Sql Server 2008,Tsql,Sql Server 2005,我有一张桌子,价格表 列UPC(整数)、价格(货币) 我试图对价格列中的所有美分进行四舍五入,以.x5或.x9结尾 如果价格的最后一位是0-5,那么最后一位应该是5。 如果价格的最后一位是6-9,那么最后一位应该是9。 示例1.00变为1.051.21变为1.251.26变为1.29 我正在使用以下内容,但是在更新之后,我得到一些记录,其中价格被更新为NULL,我不知道为什么。它对95%的数据都能正常工作,但我看不到与数据不同的地方 我的想法是(一轮(价格,1,2)给了我价格中的美元。从总价格

我有一张桌子,价格表

列UPC(整数)、价格(货币)

我试图对价格列中的所有美分进行四舍五入,以.x5或.x9结尾

如果价格的最后一位是0-5,那么最后一位应该是5。
如果价格的最后一位是6-9,那么最后一位应该是9。
示例
  • 1.00变为1.05
  • 1.21变为1.25
  • 1.26变为1.29

我正在使用以下内容,但是在更新之后,我得到一些记录,其中价格被更新为NULL,我不知道为什么。它对95%的数据都能正常工作,但我看不到与数据不同的地方

我的想法是(一轮(价格,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;
有更好的方法吗?我不明白为什么我会得到一个空的价格,而所有的美分的情况都应该考虑,即使他们没有,我仍然应该得到美元金额的价格与回合(价格,1,2)。我不应该需要其他,因为不应该有任何其他条件

谢谢


Marshall

如果值以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
UPDATE PriceTable
SET Price = ROUND(Price,1,2) + 
CASE 
WHEN Price -(ROUND(Price,1,2)) BETWEEN .00 AND .05 THEN .05
ELSE .09
END;

一定有像1.255或1.295这样的价格掉入裂缝。@Yushioli-就是这样。谢谢。一定有像1.255或1.295这样的价格掉入裂缝。@Yushioli-就是这样。谢谢。效果很好。介于0.05和0.06之间的值是问题所在。谢谢你的帮助和快速响应。这很有效非常好。介于.05和.06之间的值是有问题的。感谢您的帮助和快速响应。