从varchar转换为float

时间:2017-10-31 03:11:09

标签: sql sql-server

我想将varchar转换为float,但收到错误:

  

将数据类型varchar转换为float

时出错

这是遇到错误的代码详细信息:

declare @per varchar(10) = '10.21%';

print substring(@per, 1, len(@per) - 1);

set @str = 'select top 1 ' + cast(substring(@per, 1, len(@per) - 1) as float) + ' as ColumnA from #TempSui' ;

exec (@str);

4 个答案:

答案 0 :(得分:0)

你的这句话substring(@per,1,len(@per) -1)提取没有%的数字,然后转换为float

之后,您尝试将字符串select top 1与浮点数连接起来。导致错误。

删除cast(),它应该是好的

set @str = 'select top 1 ' + substring(@per,1,len(@per) -1) + ' 
AS ColumnA from #TempSui' ;

编辑:

set @str = 'select top 1 ' + 'CAST ( ' + substring(@per,1,len(@per) -1) 
     + ' AS FLOAT) AS ColumnA from #TempSui' ;

编辑2: 不确定#TempSui表的目的是什么,如果只需要将@per转换为浮点数,就可以这样做

SELECT  CAST(substring(@per,1,len(@per) -1) AS FLOAT);

答案 1 :(得分:0)

第3行发行 当您使用浮点值连接String时,这在SQL Server中是不可能的。您只能连接字符串值

请参阅此屏幕截图以供参考 enter image description here

答案 2 :(得分:0)

您也可以通过以下方式执行此操作:

DECLARE @per VARCHAR(10)= '10.21%';
DECLARE @str NVARCHAR(MAX);

PRINT SUBSTRING(@per, 1, LEN(@per)-1);
SELECT @per = CAST(SUBSTRING(@per, 1, LEN(@per)-1) AS FLOAT);
SET @str = 'select top 1 '+@per+' [ColumnA] from #TempSui';

EXEC (@str);

结果:

10.2
select top 1 10.21 [ColumnA] from #TempSui

答案 3 :(得分:0)

只需更改行

即可
set @str = 'select top 1 convert(float,'+''''+'' + substring(@per,1,len(@per) -1)  + ''+''''+') as ColumnA from #TempSui' ;

试试这段代码:

 declare @per varchar(10) = '10.21%';
 print substring(@per, 1, len(@per) - 1);

 set @str = 'select top 1 convert(float,'+''''+'' + substring(@per, 1, len(@per) - 1)  + ''+''''+') as ColumnA from #TempSui' ;

 exec (@str);