SQLserver 字符串转数字问题

数据库 同时被 2 个专栏收录
5 篇文章 0 订阅
7 篇文章 0 订阅

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

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

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

 结果运行转换数据异常。

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

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

原来里面有空字符串,导致无法转换。这时可能有同鞋说用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 类型  这里还需要一点小小的处理。 然后大功告成。结果如下。

 

  • 0
    点赞
  • 0
    评论
  • 5
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值