【发布时间】:2021-03-23 09:11:38
【问题描述】:
我正在尝试将逗号 (,) 与点 (.) 更改为一行中的值,但这样做时,该值仅使用两位小数进行四舍五入。
所以[LineAmount]的值正常返回,例如:“1389,344”
但是在执行REPLACE([LineAmount], ',', '.') 时,值会变为“1389.34”
只有当值有 3 位小数时才会发生这种情况,即 2 或 1,REPLACE 正确完成。
我错过了什么?我尝试在 REPLACE 之前将值转换为 varchar 或十进制,但同样的情况发生了。
我只需要把逗号换一个点,别的什么都没有。
提前谢谢你。
【问题讨论】:
-
发送完整的minimal reproducible example。我无法复制你的问题。 db<>fiddle。然而,似乎真正的问题是您将数字数据存储为字符串。
-
列数据类型?
-
@jarlh 有效问题。猜测列的数据类型是小数(x,2)。
-
"猜测列的数据类型是小数(x,2)" 如果是,@Dr.Casual,它永远不会有值
'1389,344'。 -
float值没有逗号;这是你的第一个问题。REPLACE({FloatValue},',','.')不会做任何事情(有意义)。接下来,float是一种不精确的数据类型,因此您实际上已经表示您对使用该类型的数据丢失感到满意。 2节课; 1 数字数据类型没有格式,因此您不能用句点替换逗号。 2. 如果您想要精确的值并且不想想要遇到这样的舍入问题,请不要使用float。
标签: sql sql-server sql-server-2016