如何将十进制值转换为逗号?
this帮助我。但我的问题小数位只设置为2 ..我想要小数为2,3或4 ..示例
1,234.123 or 1,234.12345
我试过
convert(varchar, convert(decimal(18, 4), 1234.1234567), 1)
输出:1234.1234
没有逗号。但如果我用钱,小数只有2
convert(varchar,convert(money,1234.1234567),1)
输出:1,234.12
答案 0 :(得分:23)
谢天谢地(?),在 SQL Server 2012 + 中,您现在可以使用FORMAT()来实现此目的:
FORMAT(@s,'#,0.0000')
<小时/> 在以前的版本中,冒着看起来很丑的风险
<强> [查询] 强>:
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))
在第一部分中,我们使用MONEY-&gt; VARCHAR来生成逗号,但FLOOR()用于确保小数转到.00
。这很容易识别,并使用移位(*10000
)和CAST作为INT(截断)的混合来替换为小数位后的4位数来导出数字。
<强> [结果] 强>:
| COLUMN_0 |
--------------
| 1,234.1235 |
但除非您必须使用SQL Server Management Studio或SQLCMD提交业务报告,否则即使可以完成,这也是 NEVER 正确的解决方案。任何前端或报告环境都具有处理显示格式的适当功能。
答案 1 :(得分:14)
不考虑这是个好主意......
select dbo.F_AddThousandSeparators(convert(varchar, convert(decimal(18, 4), 1234.1234567), 1))
功能
-- 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
答案 2 :(得分:6)
从相关的SO问题: Format a number with commas but without decimals in SQL Server 2008 R2?
SELECT CONVERT(varchar, CAST(1112 AS money), 1)
这是在SQL Server 2008 R2中测试的。
答案 3 :(得分:2)
如果您使用的是SQL Azure Reporting Services,则不支持“格式”功能。这实际上是在SSRS中格式化图表中工具提示的唯一方法。因此,解决方法是返回一个列,该列具有用于工具提示的格式化数字的字符串表示形式。所以,我同意SQL不是格式化的地方。除非在这种情况下,工具没有适当的功能来处理显示格式。
在我的情况下,我需要显示一个用逗号和无小数格式化的数字(类型为十进制2),并在我的数据集查询中以计算列的宝石结束:
,Fmt_DDS = reverse(stuff(反向(CONVERT(varchar(25),cast(SUM(kv.DeepDiveSavingsEst)为money),1)),1,3,'')
它有效,但对于那些在路上保持报告的人来说,这是非常丑陋和不明显的。耶云!
答案 4 :(得分:-1)
SQL(或更准确地说,RDBMS)并不是格式化输出的正确选择。数据库应提供原始数据,然后应在目标应用程序中格式化(或更一般地:处理)。
但是,根据您使用的特定系统,您可以编写UDF(用户定义的函数)来实现您想要的功能。但请记住,您实际上正在返回一个varchar,您将无法进一步处理(例如汇总)。