在SQL Server中转换为float

时间:2018-01-22 22:12:11

标签: sql sql-server-2008

我想将我的列数据类型从varchar转换为float。该列包含数字和NULL。

我需要的是计算非空的地方的平均值。

那是我的代码:

ALTER TABLE table_name 
    ALTER COLUMN column_name float
GO

DECLARE @mean_column_name real;

SELECT @mean_column_name = AVG(column_name) 
FROM table_name 

我收到了这个错误

  

将数据类型varchar转换为float时出错。

我也试过

 DECLARE @mean_column_name real;

 SELECT @mean_column_name = AVG(column_name) 
 FROM table_name 
 WHERE column_name IS NOT NULL

但是我得到了同样的错误

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您显然列中的值对转换无效。在SQL Server 2012+中,您可以这样做:

select @mean_column_name = AVG( try_convert(float, column_name ))
from table_name ;

2008年不支持。因此,请使用case

select @mean_column_name = AVG( case when column_name not like '%[^0-9.]%' and column_name not like '%.%.%' then convert(float, column_name) end)
from table_name ;