将Decimal转换为Varchar

Hos*_*146 32 t-sql sql-server

我在一个定义为十进制(8,3)的表中有一个十进制列.我想在一个Select语句中包含此列,将其转换为a Varchar并仅显示两个小数位.我似乎无法找到正确的选项组合来执行此操作,因为我尝试的所有内容仍会产生三个小数位.

Nic*_*rey 45

这是一种方式:

create table #work
(
  something decimal(8,3) not null 
)

insert #work values ( 0 )
insert #work values ( 12345.6789 )
insert #work values ( 3.1415926 )
insert #work values ( 45 )
insert #work values ( 9876.123456 )
insert #work values ( -12.5678 )

select convert(varchar,convert(decimal(8,2),something))
from #work
Run Code Online (Sandbox Code Playgroud)

如果你想要它正确对齐,这样的事情应该对你做:

select str(something,8,2) from #work
Run Code Online (Sandbox Code Playgroud)

  • 切勿将小数插入`STR()`函数.它会将小数转换为浮点数,并可能产生时髦的舍入差异. (7认同)

小智 26

如果您使用的是SQL Server 2012,2014或更高版本,请使用格式函数:

select Format( decimalColumnName ,'FormatString','en-US' )
Run Code Online (Sandbox Code Playgroud)

查看Microsoft主题和.NET格式语法,了解如何定义格式字符串.

这个问题的一个例子是:

select Format( MyDecimalColumn ,'N','en-US' )
Run Code Online (Sandbox Code Playgroud)


Guf*_*ffa 25

您可能需要转换decimalmoney(或decimal(8,2))以获得精确的格式.该convert方法可以采用控制格式样式的第三个参数:

convert(varchar, cast(price as money))       12345.67
convert(varchar, cast(price as money), 0)    12345.67
convert(varchar, cast(price as money), 1)    12,345.67
Run Code Online (Sandbox Code Playgroud)


Sim*_*n S 6

我认为CAST(ROUND(yourColumn,2) as varchar)应该做这项工作。

但是为什么要在 T-SQL 中进行这种表现形式的格式化呢?