我正在尝试确定在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 CAST(Value as Decimal(10,2)) FROM TABLE_NAME;
小数点后会有两个值。(mssql server)
其他回答
SELECT CAST(Value as Decimal(10,2)) FROM TABLE_NAME;
小数点后会有两个值。(mssql server)
select convert(int,@value)
Round有一个可选参数
Select round(123.456, 2, 1) will = 123.45
Select round(123.456, 2, 0) will = 123.46
另一种方法是ODBC的TRUNCATE函数:
DECLARE @value DECIMAL(18,3) =123.456;
SELECT @value AS val, {fn TRUNCATE(@value, 2)} AS result
现场演示
输出:
╔═════════╦═════════╗
║ val ║ result ║
╠═════════╬═════════╣
║ 123,456 ║ 123,450 ║
╚═════════╩═════════╝
备注:
我建议使用内置的ROUND函数,第3个参数设置为1。
请尝试使用此代码将一个点后的3个十进制值转换为2位小数:
declare @val decimal (8, 2)
select @val = 123.456
select @val = @val
select @val
输出值为123.46