SQL语句类型转换问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 03:44:30
select a,b
into #M
from S where b=cast(b as int)

select sum(b) from #M
b本来是varchar型 是不能用sum函数,我把他转换成int,但是我上面那样写了之后为什么还抱错:sum or average aggregate 运算不能以 varchar 数据类型作为参数

--我在Sqlserver中
1.错误很明显,你的b字段有不是全数字的字符串
如果不需要错误数据直接 使用isnumeric来判断是否是数字,是返回1,不是返回0
上面改成这样即可
select a,b
into #M
from S
--这里可以显示转换cast isnumeric(b) as int,也可以不转换 数据库会默认隐式转换
select sum( Case when ISNUMERIC(b) = 1 then b ELSE 0 END ) from #M

2.如需要找到错误数据可以
SELECT *
FROM(
select *,Case when ISNUMERIC([ID]) =1 then [ID] ELSE 0 END AS 'aa' from #M
)as t WHERE aa=0

3.或用like方式也能找出不是数字的字符串
select *
from #M
WHERE id like '[0-9][0-9][0-9]'

你查询的时候转换下就可以了
不用在where那里转换吧

select a,cast(b as int) as b
into #M
from S

select sum(b) from #M

select a,convert(int,b) b into #M
from S
向临时表写的时候就应该把b列变成int型
select sum(b) from #M

你的b列里面是不是类似'123' 之类的数据,也就是说全部以数字形式出现的字符类型,才可以转化int。有可能是这个原因。

你只在where条件中使用了类型转换,应该是
select a,cast(b as int)
into #M
from S
就可以了