将Decimal转换为Varchar

时间:2011-04-06 19:51:23

标签: sql-server tsql

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

6 个答案:

答案 0 :(得分:43)

这是一种方式:

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

如果你想让它正确对齐,那么你应该这样做:

select str(something,8,2) from #work

答案 1 :(得分:25)

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

select Format( decimalColumnName ,'FormatString','en-US' )

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

这个问题的一个例子是:

select Format( MyDecimalColumn ,'N','en-US' )

答案 2 :(得分:24)

您可能需要将decimal转换为money(或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

答案 3 :(得分:4)

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

但是你为什么要在T-SQL中进行这种表示格式化?

答案 4 :(得分:2)

希望这会对你有所帮助

Cast(columnName as Numeric(10,2)) 
        or

Cast(@s as decimal(10,2))

我不知道为什么要转换为varchar?。如果你再次转换为varchar转换回decimalil two小数点

答案 5 :(得分:1)

希望这会有所帮助。

DECLARE  @emp_cond nvarchar(Max) =' ',@LOCATION_ID  NUMERIC(18,0)   
SET@LOCATION_ID=10110000000
IF CAST(@LOCATION_ID AS VARCHAR(18))<>' ' 
            BEGIN
                SELECT @emp_cond= @emp_cond + N' AND 
CM.STATIC_EMP_INFO.EMP_ID = ' ' '+  CAST(@LOCATION_ID AS VARCHAR(18))  +' ' ' '
           END
print  @emp_cond  
EXEC( @emp_cond)