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