SQLserver 字符串转数字问题

之前做个需求遇到字符串转数字,遇到点问题和大家分享下。

我想对查询的结果集分组求和,本以为转换下数据类型用聚合函数直接求和就完事了。就像下面这样

SELECT
	p.id,
	p.objno,
	p.objname,
-- 	bt.projecttypename,
	bic.ratename,
	sum(convert(numeric(10,2),bic.ratevalue )),
	bic.ratevalue
--CAST ( bic.ratevalue AS NUMERIC(10,2) )

FROM
	Biddingproject_approval_budget ba
	LEFT JOIN Biddingproject_typemaster bt ON ba.id = bt.tenderid
	LEFT JOIN Biddingproject_Interestrate bi ON bi.mastertprojecttypeid = bt.id
	LEFT JOIN project p ON p.id = bi.ratevalue
	LEFT JOIN Biddingproject_implementation_costs bic ON bic.mastertprojecttypeid = bt.id
	LEFT JOIN Biddingproject_typemaster btv ON ba.id = btv.tenderid 
WHERE
	bi.ratename = '项目子编号ID' 
	AND bi.ratevalue <> '' 
	AND bi.ratevalue IS NOT NULL 
	AND btv.projecttypename = '小计' 
	AND bt.projecttypename NOT IN ( '小计', '差额' ) 
	AND bic.ratename <> '8、实施费用' 
	AND ba.id = 'AUAS4IJIUIWLVD3KBOXSLQK9T2NM1148' 
GROUP BY
	p.id,
	bt.id,
	bic.ratename,
	p.objno,
	bic.ratevalue,
	p.objname

 结果运行转换数据异常。

SQLserver 字符串转数字问题_第1张图片

想着不应该啊,换 cast  函数  依旧报 数据转换异常。

去掉convert 函数,先看下数据,数据结果如下:

SQLserver 字符串转数字问题_第2张图片

原来里面有空字符串,导致无法转换。这时可能有同鞋说用isnull函数 ,然后发现依旧报错。为什么呢?

isnull 函数是对null进行处理的,在这里不起作用。

这里我们要用 case 函数,最终SQL 调整如下

SELECT
	p.id,
	p.objno,
	p.objname,
	bic.ratename,
sum(case when bic.ratevalue = '' then 0 else CAST ( bic.ratevalue AS NUMERIC(10,2) ) end )
FROM
	Biddingproject_approval_budget ba
	LEFT JOIN Biddingproject_typemaster bt ON ba.id = bt.tenderid
	LEFT JOIN Biddingproject_Interestrate bi ON bi.mastertprojecttypeid = bt.id
	LEFT JOIN project p ON p.id = bi.ratevalue
	LEFT JOIN Biddingproject_implementation_costs bic ON bic.mastertprojecttypeid = bt.id
	LEFT JOIN Biddingproject_typemaster btv ON ba.id = btv.tenderid 
WHERE
	bi.ratename = '项目子编号ID' 
	AND bi.ratevalue <> '' 
	AND bi.ratevalue IS NOT NULL 
	AND btv.projecttypename = '小计' 
	AND bt.projecttypename NOT IN ( '小计', '差额' ) 
	AND bic.ratename <> '8、实施费用' 
	AND ba.id = 'AUAS4IJIUIWLVD3KBOXSLQK9T2NM1148' 
GROUP BY
	p.id,
	bic.ratename,
	p.objno,
	p.objname

在这里我们先用case函数把是空的字符串转成 0 ,在这里要注意  case函数 会见数字默认转为 int 类型  这里还需要一点小小的处理。 然后大功告成。结果如下。

SQLserver 字符串转数字问题_第3张图片

 

你可能感兴趣的:(数据库,sql,SQL分组求和,SQL,字符串转数字,SQL空字符串转数字如何处理)