我想将我的列数据类型从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
但是我得到了同样的错误
我该怎么做?
答案 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 ;