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

 结果运行转换数据异常。

想着不应该啊,换 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
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server中,将字符串转换为数字可以使用几种方法。首先,可以使用CAST函数将字符串转换为DECIMAL类型,如所示。例如,可以使用以下语句将字符串'6.0'转换为DECIMAL(6, 2)类型的数字:CAST('6.0' AS DECIMAL(6, 2)),结果为6.00。 另一种方法是使用CONVERT函数来执行字符串到数字的转换。可以使用以下语句将字符串'6.0'转换为DECIMAL(6, 2)类型的数字:CONVERT(DECIMAL(6, 2), '6.0'),结果同样为6.00。 如果字符串可能包含值或字符串,可以使用ISNULL函数来处理。然而,如果将字符串直接传递给ISNULL函数进行转换,可能会遇到错误。这是因为ISNULL函数对字符串处理方式与CAST和CONVERT函数不同。要解决这个问题,可以先使用CASE函数将字符串转换为0,然后再使用CAST或CONVERT函数进行进一步的转换,如和所示。 综上所述,要在SQL Server中将字符串转换为数字,您可以使用CAST、CONVERT和CASE函数的组合来实现所需的结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [SQLserver 字符串转数字问题](https://blog.csdn.net/weixin_39823527/article/details/90022608)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [sqlserver 字符串类型转换成小数或者整数类型](https://blog.csdn.net/Pei_hua100/article/details/125486924)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值