将百分比添加到值结尾时转换失败

问题描述 投票:0回答:2
,CASE WHEN 
   sq.Total_Sales > 0 THEN 
   CAST(ROUND(CAST(sq.Total_Sales AS FLOAT) / (SUM(pfm.C1)) * 100,0) AS varchar(10)) + '%'
   ELSE 0 
   END AS Conversion_Rate

有人可以帮我解释为什么我最后无法添加%?我收到“将varchar值'25%'转换为数据类型int”时出现“转换失败”错误。

示例数据:

enter image description here

sql casting percentage
2个回答
0
投票

所以从查询返回的列只能是单一类型,对吧?在查看查询时,db引擎会在CASE语句中看到两种类型:

  • CAST(ROUND(CAST(sq.Total_Sales AS FLOAT) / (SUM(pfm.C1)) * 100,0) AS varchar(10)) + '%'生产VARCHAR(11)
  • 0,在ELSE部分,是一个INT

数据库引擎尝试将它们合并到INT,并且由于“5%”无法转换为INT,因此会出错。你需要将你的ELSE 0改为生产varchar的东西,比如ELSE '0%'甚至是ELSE ''


0
投票

看起来SQL Server不赞成您尝试在字符串连接中使用整数文字0。这是否会或可能实际发生是另一个故事。重要的是,因为SQL Server将要求您使用字符串来连接字符串 - 即使无法实现连接的理论路径。

试试这个:

,CASE WHEN 
   sq.Total_Sales > 0 THEN 
   CAST(ROUND(CAST(sq.Total_Sales AS FLOAT) / (SUM(pfm.C1)) * 100,0) AS varchar(10)) + '%'
   ELSE '0' 
   END AS Conversion_Rate
© www.soinside.com 2019 - 2024. All rights reserved.