我正在尝试确定在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()函数并将其转换回小数。还有别的办法吗?
当前回答
你到底要不要小数点?
如果没有,请使用
select ceiling(@value),floor(@value)
如果你用0做,那么做一轮:
select round(@value,2)
其他回答
我知道这个问题非常古老,但没有人使用子字符串舍入。这是对很长的数字进行四舍五入的优势(SQL server中字符串的限制通常是8000个字符):
SUBSTRING('123.456', 1, CHARINDEX('.', '123.456') + 2)
SELECT Cast(Round(123.456,2,1) as decimal(18,2))
SELECT CAST(Value as Decimal(10,2)) FROM TABLE_NAME;
小数点后会有两个值。(mssql server)
我知道这有点晚了,但我不认为这是一个答案,我已经使用这个技巧很多年了。
只需从值中减去0.005并使用Round(@num,2)。
你的例子:
declare @num decimal(9,5) = 123.456
select round(@num-.005,2)
返回123.45
它会自动调整四舍五入到您正在寻找的正确值。
顺便问一下,你是在重现电影《办公空间》里的程序吗?
对(x,1)取余是最简单的方法。