2011-04-06 69 views
22

我在一个定义为十进制(8,3)的表中有一个小数列。我想在Select声明中包含此列,将其转换为Varchar并仅显示两位小数。我似乎无法找到正确的选项组合,因为我尝试的所有东西都会产生三位小数。将十进制转换为Varchar

+0

你为什么不开始显示你到目前为止? – 2011-04-06 19:55:22

+1

您的数据的一个例子,特别是您希望它看起来像总是有帮助的。尼古拉斯包括一个右对齐的答案,因为你没有展示如何显示结果(浪费时间?)。你的目标是尽可能得到最好的答案,而不是不鼓励这些志愿者解决方案。 – JeffO 2011-04-06 20:10:14

回答

35

这里有一种方法:

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 
+5

切勿将小数点插入'STR()'函数。它会将小数转换为浮点数,并且可能会出现时髦的舍入差异。 – 2011-04-06 20:02:14

+1

当要求将其舍入到小数点后两位时极不可能,但要采取措施。 – 2011-04-06 20:36:02

3

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

但是,您为什么要在T-SQL中执行这种表示格式?

+0

啧啧,谢谢,我从来没有想到过!当然我尝试过,我仍然得到3位小数。 – Hosea146 2011-04-06 19:56:32

+0

@ Hosea146写下我的第一个答案,但没有正确地阅读你的问题。 – 2011-04-06 19:57:49

1

希望这将帮助你

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

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

我我不明白为什么你想投射到varchar?。如果你投射到varchar再次转换回decimail为two小数点

21

您可能需要转换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 
13

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

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

审查Microsoft话题以及如何定义格式字符串的.NET格式语法。

对于这个问题的一个例子是:

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

这应该是正确的答案。 – Renan 2016-08-03 16:52:08

1

希望这会有所帮助。

DECLARE @emp_cond nvarchar(Max) =' ',@LOCATION_ID NUMERIC(18,0) 
[email protected]_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) 
相关问题