如何将十进制值转换为逗号?
这有助于我.但我的问题小数位只设置为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)
从相关的SO问题: 在SQL Server 2008 R2中使用逗号格式化但没有小数的数字?
SELECT CONVERT(varchar, CAST(1112 AS money), 1)
Run Code Online (Sandbox Code Playgroud)
这是在SQL Server 2008 R2中测试的.
| 归档时间: |
|
| 查看次数: |
113603 次 |
| 最近记录: |