在varchar中处理小数时,SQL Server中的ROUND()

时间:2017-11-15 22:36:27

标签: sql sql-server tsql

我知道Round()的用法,它适用于

select round(147.26719,5,1)

返回147.26719。

目前我正在处理从txt文件导入的表,因此所有列都是varchar,当我使用round()来处理varchar中的小数时这样

select round('147.26719',5,1)

非常奇怪,它返回147.26718。

我目前正确运行

select round(cast('147.26719', decimal(11,6)),5,1)

但有人可以向我解释为什么会这样吗?我相信这是隐式将varchar转换为十进制的东西,但不知道为什么。

提前致谢

1 个答案:

答案 0 :(得分:3)

默认情况下,round()字符串的隐式转换为float,而不是小数。浮点数是不精确的,可能只是一个小小的点,从你看到的一点点 - 但足够重要。

您的解决方案是正确的 - 投射到小数。

您可以使用以下代码轻松看到这一点:

select round('123.3', 1) as col
into x;

select *
from information_schema.columns
where table_name = 'x';