我正在尝试确定在SQL中截断或删除额外的小数位而不舍入的最佳方法。例如:
declare @value decimal(18,2)
set @value = 123.456
这将自动将@value舍入为123.46,这在大多数情况下都很好。然而,对于这个项目,我不需要那样。有没有一种简单的方法来截断我不需要的小数?我知道我可以使用left()函数并将其转换回小数。还有别的办法吗?
我正在尝试确定在SQL中截断或删除额外的小数位而不舍入的最佳方法。例如:
declare @value decimal(18,2)
set @value = 123.456
这将自动将@value舍入为123.46,这在大多数情况下都很好。然而,对于这个项目,我不需要那样。有没有一种简单的方法来截断我不需要的小数?我知道我可以使用left()函数并将其转换回小数。还有别的办法吗?
当前回答
我知道这个问题非常古老,但没有人使用子字符串舍入。这是对很长的数字进行四舍五入的优势(SQL server中字符串的限制通常是8000个字符):
SUBSTRING('123.456', 1, CHARINDEX('.', '123.456') + 2)
其他回答
实际上,不管第三个参数是0或1或2,它不会四舍五入你的值。
CAST(ROUND(10.0055,2,0) AS NUMERIC(10,2))
我认为你只需要小数, 在这种情况下,你可以使用以下方法:
declare @val decimal (8, 3)
SET @val = 123.456
SELECT @val - ROUND(@val,0,1)
这将删除任何数字的小数部分
SELECT ROUND(@val,0,1)
对(x,1)取余是最简单的方法。
select round(123.456, 2, 1)