带逗号的SQL Server格式小数位

Sni*_*pet 12 sql sql-server

如何将十进制值转换为逗号?

有助于我.但我的问题小数位只设置为2 ..我希望小数为2,3或4 ..示例

1,234.123   or    1,234.12345
Run Code Online (Sandbox Code Playgroud)

我试过了

convert(varchar, convert(decimal(18, 4), 1234.1234567), 1) 
Run Code Online (Sandbox Code Playgroud)

产量:1234.1234

没有逗号.但如果我用钱,小数只是2

convert(varchar,convert(money,1234.1234567),1)

产量:1,234.12

Ric*_*iwi 24

谢天谢地(?),在SQL Server 2012+中,您现在可以使用FORMAT()来实现此目的:

FORMAT(@s,'#,0.0000')
Run Code Online (Sandbox Code Playgroud)


在以前的版本中,冒着看起来很丑陋的风险

[查询]:

declare @s decimal(18,10);
set @s = 1234.1234567;
select replace(convert(varchar,cast(floor(@s) as money),1),'.00',
    '.'+right(cast(@s * 10000 +10000.5 as int),4))
Run Code Online (Sandbox Code Playgroud)

在第一部分中,我们使用MONEY-> VARCHAR来生成逗号,但FLOOR()用于确保小数转到.00.这很容易识别,并使用shift(*10000)和CAST的混合作为INT(截断)来取代小数点后的4位数来导出数字.

[结果]:

|   COLUMN_0 |
--------------
| 1,234.1235 |
Run Code Online (Sandbox Code Playgroud)

但除非您必须使用SQL Server Management Studio或SQLCMD提供业务报告,否则这绝不是正确的解决方案,即使可以完成.任何前端或报告环境都具有处理显示格式的适当功能.


bum*_*mmi 14

不考虑这是个好主意......

select dbo.F_AddThousandSeparators(convert(varchar, convert(decimal(18, 4), 1234.1234567), 1))
Run Code Online (Sandbox Code Playgroud)

功能

-- Author:      bummi
-- Create date: 20121106
CREATE FUNCTION F_AddThousandSeparators(@NumStr varchar(50)) 
RETURNS Varchar(50)
AS
BEGIN
declare @OutStr varchar(50)
declare @i int
declare @run int

Select @i=CHARINDEX('.',@NumStr)
if @i=0 
    begin
    set @i=LEN(@NumStr)
    Set @Outstr=''
    end
else
    begin   
     Set @Outstr=SUBSTRING(@NUmStr,@i,50)
     Set @i=@i -1
    end 


Set @run=0

While @i>0
    begin
      if @Run=3
        begin
          Set @Outstr=','+@Outstr
          Set @run=0
        end
      Set @Outstr=SUBSTRING(@NumStr,@i,1) +@Outstr  
      Set @i=@i-1
      Set @run=@run + 1     
    end

    RETURN @OutStr

END
GO
Run Code Online (Sandbox Code Playgroud)

  • 倾向于实际提供解决方案,同时警告这不是最好的方法! (3认同)

Dar*_*ith 8

从相关的SO问题: 在SQL Server 2008 R2中使用逗号格式化但没有小数的数字?

SELECT CONVERT(varchar, CAST(1112 AS money), 1)
Run Code Online (Sandbox Code Playgroud)

这是在SQL Server 2008 R2中测试的.