SQL新手问题: varchar可以转换为float,但是转换为decimal时就会报错。程序如下:

SELECT [列 0],AVG(cast([列 7] as numeric(8,2)))
FROM [TABLE1]
GROUP BY [列 0]
having avg(cast([列 7] as decimal(8,2)))>60;

报错:从数据类型 varchar 转换为 numeric 时出错。
注:原始表格中的列7中没有字母,全是字符串型的数字。
错在哪里了?

是报的算术溢出还是就只是报错?
可以用where isnumeric(列7)=0 查看一下哪些不能转换为数字
如果是算术溢出,那可以放大decimal的位数追问

听力你的建议。我用isnumeric函数查询后,确实有空白的行。

但是,还有一个疑问:为什么转换位float型就不报错,而转decimal或numeric 时就会报错呢?

报错:从数据类型 varchar 转换为 numeric 时出错。

没有报算术溢出。
谢谢。

追答

当空字符串 (" ") 转换为 numeric 或 decimal 时,SQL Server 也返回错误。
这是联机丛书上原话,并没有多加解释
个人猜测可能是由于float是近似数,可以忽略转换的精度
而decimal精确类型的精度可能无法对空字符串进行一个精确的转换

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-05-01
numeric(8,2)//改为
decimal(8,2)追问

刚试了下,还是出现原来的报错。
我理解的是numeric 和 decimal是一样的,可以互换使用。不知这么理解可以不?

追答

可以这么说,,但是我不出你程序有什么问题,转换是没有问题。。分组也没有问题。。

SELECT [列 0],AVG(cast([列 7] as numeric(8,2)))
FROM [TABLE1]
GROUP BY [列 0] 只运行这些试一试。。

相似回答