使用t-sql情况时,根据基础数将十进制值设置为特定值

时间:2014-03-15 16:46:04

标签: sql sql-server-2008 decimal case rounding

如何在T-Sql中使用大小写将基础数字的值设置为基于条件的值?示例澄清:

SalesPrice 用于价格(2位小数),例如129.99或19.99。

我想选择SalesPrice,但结果略有调整:

  • 如果SalesPrice> = 100,小数应为.00(129.99 - > 130.00)
  • 如果SalesPrice< 100位小数应为.95(19.99 - > 19.95)

谢谢!

1 个答案:

答案 0 :(得分:0)

假设所有值都是正值,这里有一种方法:

update t
    set SalesPrice = (case when SalesPrice >= 100 then floor(SalesPrice) + 1
                           when SalesPrice < 100 then floor(SalesPrice) + 0.95
                      end)
    where (SalesPrice - floor(SalesPrice)) >= 0.9;

我添加了where子句,因此这仅影响小数量大于0.90的价格。这样,15.49之类的价格就不会受到影响。您可以根据需要进行调整。如果您想影响所有带小数值的价格,那么:

update t
    set SalesPrice = (case when SalesPrice >= 100 then floor(SalesPrice) + 1
                           when SalesPrice < 100 then floor(SalesPrice) + 0.95
                      end)
    where SalesPrice > floor(SalesPrice);

where子句保证有小数。这可以防止21变成21.95