将float与字符串连接导致错误

时间:2016-10-19 20:37:52

标签: sql-server

我正在尝试在select语句中执行以下操作: 表A有一个名为f_total的列。 f_total是nvarchar(50)null
存储在f_total中的数据是整数。例如。 350万 我需要将f_total除以100000000,将其四舍五入到小数点后3位,并连接" $"在输出之前和" mm"输出后。
这就是我在选择中所拥有的:

iif(f_total > 0, '$' + cast(round(cast(f_total/100000000 as float),3) as nvarchar(20)),'') +
'mm ' as Text1 

联合   0为Text1

解决方案:union的第二部分中的INT优先,这就是为什么union的第一部分强制转换为int数据类型的原因。 改变" 0为Text1"到"' 0'作为Text1" (单引号约为0)

如果f_total = 3500000,输出应为0.035mm

我尝试了许多演员组合,但一直在犯错误#34;转换从nvarchar / varchar转换为int数据类型。那里有很多帖子,但我似乎无法找到适合这种情况的答案。

2 个答案:

答案 0 :(得分:1)

你只需要将f_total转换为float。

您的查询应该是这样的:

iif(f_total > 0, '$' + cast(round(cast(cast(f_total as float)/100000000 
as float),3) as nvarchar(20)),'') +
'mm ' as Text1 

输出:$ 0.035

我相信,你会得到你渴望的输出。

谢谢。

答案 1 :(得分:0)

自2012版以来,您可以使用 CONCAT 功能:

SELECT IIF(f_total > 0, CONCAT('$', CONVERT(FLOAT, f_total)/100000000,'mm'),'')

试验: enter image description here

对于早于2012年的版本,您可以使用:

SELECT IIF(f_total > 0, '$' + CONVERT(VARCHAR(6),CONVERT(FLOAT, f_total)/100000000) + 'mm','')

试验: enter image description here