with t as
(
select "-" as col1 --isnumeric("-")这里会判断为数字,所以不能用
union all
select "1" as col1
union all
select "2" as col1
union all
select "3.4" as col1
union all
select "s" as col1
)
select col1, convert(numeric(10,4),
-- case WHEN isnumeric(col1)=1 then col1 else 0*1.0 end
case WHEN PATINDEX("%[^0-9|.|-|+]%",col1)=0
THEN col1
ELSE 0*1.0
end
)
as cc from t