如何将十进制值转换为逗号?
这对我有帮助。但我的问题是小数位仅设置为 2..我希望小数点为 2、3 或 4..示例
1,234.123 or 1,234.12345
我试过
convert(varchar, convert(decimal(18, 4), 1234.1234567), 1)
输出:1234.1234
没有逗号。但如果我用钱,小数点只有 2
转换(varchar,转换(钱,1234.1234567),1)
输出:1,234.12
如何将十进制值转换为逗号?
这对我有帮助。但我的问题是小数位仅设置为 2..我希望小数点为 2、3 或 4..示例
1,234.123 or 1,234.12345
我试过
convert(varchar, convert(decimal(18, 4), 1234.1234567), 1)
输出:1234.1234
没有逗号。但如果我用钱,小数点只有 2
转换(varchar,转换(钱,1234.1234567),1)
输出:1,234.12
谢天谢地(?),在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->VARCHAR 来生成逗号,但使用 FLOOR() 来确保小数转到.00
. 这很容易识别并替换为小数点后的 4 位数字,使用移位 ( *10000
) 和 CAST 作为 INT(截断)的混合来推导数字。
[结果]:
| COLUMN_0 |
--------------
| 1,234.1235 |
但是,除非您必须使用 SQL Server Management Studio 或 SQLCMD 交付业务报告,否则这绝不是正确的解决方案,即使可以做到。任何前端或报告环境都具有处理显示格式的适当功能。
不认为这是一个好主意......
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
来自相关的 SO 问题: 在 SQL Server 2008 R2 中格式化一个带逗号但不带小数的数字?
SELECT CONVERT(varchar, CAST(1112 AS money), 1)
这在 SQL Server 2008 R2 中进行了测试。
如果您使用的是 SQL Azure Reporting Services,则不支持“格式”功能。这实际上是在 SSRS 图表中格式化工具提示的唯一方法。因此,解决方法是返回一个列,该列具有用于工具提示的格式化数字的字符串表示形式。所以,我同意 SQL 不是格式化的地方。除非在这种情况下,该工具没有适当的功能来处理显示格式。
在我的情况下,我需要显示一个用逗号格式化且没有小数(输入小数 2)的数字,并在我的数据集查询中得到一个计算列的宝石:
,Fmt_DDS=reverse(stuff(reverse(CONVERT(varchar(25),cast(SUM(kv.DeepDiveSavingsEst) as money),1)), 1, 3, ''))
它有效,但对于以后维护报告的人来说非常丑陋且不明显。耶云!
SQL(或者更准确地说,RDBMS)并不是格式化输出的正确选择。数据库应提供原始数据,然后应在目标应用程序中对其进行格式化(或更一般地说:处理)。
但是,根据您使用的特定系统,您可以编写一个 UDF(用户定义函数)来实现您想要的。但请记住,您实际上是在返回一个 varchar,您将无法进一步处理(例如总结)。