SQL Server 数据库千位分隔符 3位逗号分隔显示金额


大金额显示增加可读性问题(每千位一个逗号)

我们在进行报表开发,或者业务数据提取的业务任务时,面对较大金额时,为了增加可读性,一般都会
被要求金额字段或较大数字字段,要每千分位用逗号隔开显示。那么就面临着数据字段类型的转换问题。
类如:将123456789.32 用 123,456,789.32显示,或者 $123,456,789.32显示

在网上以搜索,结果大部分都是硬拼的做法,在此我介绍一种简单的做法,真的是很简单。该文只是适合初学者,高手勿喷,谢谢。

在此我介绍一下SQL Server的查询:网上做法大部分都是如下做法。

select convert(varchar(30),cast(123456789.23 as money),1);
结果:123,456,789.23

如果想要显示美元符号,则:
select '$'+convert(varchar(30),cast(123456789.23 as money),1);
结果:$123,456,789.23

虽然这样做固然能实现一部分需求,但是你有没有想过,你的数值很大时怎么办?

如果是15位数以上的数字怎么办?还用这个money类型转换就溢出了。

select convert(varchar(30),cast(1234567890123456 as money),1);

结果:Arithmetic overflow error converting numeric to data type money.

所以还是因为我们学习的太少了,遇事总是喜欢找CSDN,或者百度。其实microsoft官方有个函数给你使用,方便的很,而且提供了许多的用法。下面我就介绍其中一种。

如果是15位数以上的数字怎么办?不能再用money类型转换了,请用FORMAT函数进行转换。
select format(1234567890123456.11 ,'N'),
	   format(1234567890123456.11 ,'N0'),
	   format(1234567890123456.11 ,'C'); 
	   
结果:1,234,567,890,123,456.11 、 1,234,567,890,123,456 、 $1,234,567,890,123,456.11
是不是很方便,不仅可以千分位逗号分隔,还可以去除小数位,还可以加上$美元符号

下面介绍一下FORMAT的入参用法:

declare @num decimal(20);
set @num = 123456789;

SELECT @num,
       FORMAT(@num, 'N', 'en-us') AS 'Number Format' ,
       FORMAT(@num, 'G', 'en-us') AS 'General Format',
       FORMAT(@num, 'C', 'en-us') AS 'Currency Format',
       FORMAT(@num, 'C', 'de-de') AS 'Currency Format2'   
 
结果:
Number      Numeric Format  General Format  Currency Format   Currency Format
----------- --------------  --------------  --------------  ---------------  
123456789	123,456,789.00	123456789	    $123,456,789.00   123.456.789,00 €
  
第一个参数是需要转换的数字;
第二个参数数转换类型;
第三个参数是指定区域;

format函数含有很多的用法,在此就不一一介绍,请自行去microsoft官网查询。
microsoft官网地址:
https://docs.microsoft.com/zh-cn/sql/t-sql/functions/format-transact-sql?view=sql-server-ver15

需要此文对初学者能有些帮助,有好几个开发人员问了我同一个问题,故写了此文。
高手勿喷。。。。。。。。。