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.
所以还是因为我们学习的太少了,遇事总是喜欢找优快云,或者百度。其实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
需要此文对初学者能有些帮助,有好几个开发人员问了我同一个问题,故写了此文。
高手勿喷。。。。。。。。。