如何将小于 .5 的小数四舍五入为 SQL 中的以下数字?

How to round decimals smaller than .5 to the following number in SQL?

我遇到这种情况,我有一个包含 +1000 种产品的大型数据库。

其中一些的价格例如为 12.3、20.7、55.1。

| Name     | Price          |
| -------- | -------------- |
| Product 1| 12.3           |
| Product 2| 20.7           |
| Product 3| 55.1           |

(等等)...

我试过的是update prices set price = ROUND (price, 0.1)。 此输出将是:

| Name     | Price          |
| -------- | -------------- | (after updated)
| Product 1| 12.3           | 12.0
| Product 2| 20.7           | 21.0
| Product 3| 55.1           | 55.0

小数点 < .5 的价格将保持不变,我没主意了。

如有任何帮助,我将不胜感激。

编辑,我需要更新所有行,我正在尝试了解 CEILING() 但只展示了如何将它与 SELECT 一起使用,关于如何执行 idk UPDATE CEILING 什么的?

使用 UPDATE prices SET PRICE = CEILING(PRICE); 获取小数 >0.5 的值的下一个整数

不完全清楚你在问什么,但我可以告诉你所示的函数调用没有意义。

the ROUND() function 的第二个参数是小数位数,而不是您希望四舍五入的值的大小。此外,该函数只接受该参数的整数类型。因此,如果将值 0.1 传递给函数,将首先将值 转换为整数 ,然后将 0.1 转换为整数的结果整数是 0.

我们看到,调用 ROUND(price, 0.1) 与调用 ROUND(price, 0) 相同。

如果要四舍五入到最接近的 0.1,即小数点后一位,ROUND() 函数的正确值是 1.

ROUND(price, 1)

在此处比较结果:

https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=7878c275f0f9ea86f07770e107bc1274

注意尾随的 0 仍然存在,因为值的基本类型没有改变。如果您还想删除尾随的 0,那么您实际上正在进入字符串领域,为此您应该等待,客户端代码、应用程序或报告工具会处理转换。