我有一个列DECIMAL(9,6)
,即它支持像999,123456这样的值。
但是当我插入像123,4567这样的数据时,它变成了123,456700
如何删除这些零?
发布于 2010-05-30 19:04:51
decimal(9,6)
在逗号右侧存储6位数字。是否显示尾随零是一个格式化决定,通常在客户端实现。
但是,由于SSMS格式化float
时没有尾随零,因此可以通过将decimal
转换为float
来删除尾随零
select
cast(123.4567 as DECIMAL(9,6))
, cast(cast(123.4567 as DECIMAL(9,6)) as float)
打印:
123.456700 123,4567
(我的小数分隔符是逗号,但是SSMS的小数格式是用点表示的。显然是known issue。)
发布于 2018-05-16 13:51:18
我不愿意强制转换为浮点型,因为我的小数点中可能会有比浮点型更多的数字。
当FORMAT
与标准.net格式字符串'g8‘一起使用时,将返回小数(例如1e-08)非常小的情况下的科学记数法,这也不适合
使用自定义格式字符串(https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings)可以实现我想要的功能:
DECLARE @n DECIMAL(9,6) =1.23;
SELECT @n
--> 1.230000
SELECT FORMAT(@n, '0.######')
--> 1.23
如果您希望您的数字至少有一个尾随零,因此2.0不会变成2,请使用像0.0#####
这样的格式字符串
小数点是本地化的,因此使用逗号作为小数点分隔符的区域性将遇到逗号输出。是
当然,这是一种令人沮丧的做法,即让数据层进行格式化(但在我的示例中没有其他层;用户实际上是在运行存储过程并将结果放入电子邮件:/ )
发布于 2015-06-23 07:37:32
SELECT CONVERT(DOUBLE PRECISION, [ColumnName])
https://stackoverflow.com/questions/2938296
复制相似问题