前言
最近项目中,有对财务方面打交道。所以在sql中有对一些金额的计算和统计。千分号格式的一系列问题也是被我遇上了。
(一)sql中将是中文的为0,是数值的就是数值
我这里的数值直接是千分号的,所以进行了一些处理, 使用ISNUMERIC 函数如果列值是字符的话就输出 1,是数字就直接输出数字
如果使用千分号格式的数值,对他进行直接强转为int或是 decimal的话会直接报错的。
所以最好是强转的同时 再CAST 给 as money 一下 。正确做法是
select convert(decimal(16,2),cast('5,222.01' as money))
好了步入正题!sql中将是中文的为0,是数值的就是数值
select
sum(
case when ISNUMERIC(convert(decimal(16,2),cast('5,222.01' as money),1))=1
then CONVERT( decimal(16,2),convert(decimal(16,2),cast('5,222.01' as money),1))
else 0 end
)
运行结果
(二)sql 中如何将 千分号数值,转化成decimal型,或int型计算
select convert(decimal(16,2),cast('5,222.01' as money),1)
(三)SQL 将int型,或decimal型 转为千分号格式
select convert(varchar(20),cast('5222.01' as money),1)