我正在尝试确定在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()函数并将其转换回小数。还有别的办法吗?
当前回答
请尝试使用此代码将一个点后的3个十进制值转换为2位小数:
declare @val decimal (8, 2)
select @val = 123.456
select @val = @val
select @val
输出值为123.46
其他回答
SELECT Cast(Round(123.456,2,1) as decimal(18,2))
我知道这个问题非常古老,但没有人使用子字符串舍入。这是对很长的数字进行四舍五入的优势(SQL server中字符串的限制通常是8000个字符):
SUBSTRING('123.456', 1, CHARINDEX('.', '123.456') + 2)
如果你想要取一些像89.0904987这样的数字,并通过省略不需要的小数位将其转换为89.09,只需使用以下方法:
select cast(yourColumnName as decimal(18,2))
下面的截图来自W3Schools SQL数据类型部分,它描述了decimal(18,2)的作用:
因此,
select cast(89.0904987 as decimal(18,2))
给你:89.09
ROUND(number, decimals, operation)
number =>必选参数。要四舍五入的数字 decimals =>必选。要四舍五入的小数位数 operation =>可选。如果是0,则将结果四舍五入为小数。如果其他值大于0,则将结果截断为小数的个数。默认值为0
SELECT ROUND(235.415, 2, 1)
给你235.410
SELECT ROUND(235.415, 0, 1)
给你23.5万
但是现在你可以使用cast
SELECT CAST(ROUND(235.415, 0, 1) AS INT)
会得到235
对(x,1)取余是最简单的方法。