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

SELECT[列0],AVG(cast([列7]asnumeric(8,2)))FROM[TABLE1]GROUPBY[列0]havingavg(cast([列7]asd... 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中没有字母,全是字符串型的数字。
错在哪里了?
展开
 我来答
szm341
2014-05-01 · TA获得超过6726个赞
知道大有可为答主
回答量:5005
采纳率:100%
帮助的人:5151万
展开全部
是报的算术溢出还是就只是报错?
可以用where isnumeric(列7)=0 查看一下哪些不能转换为数字
如果是算术溢出,那可以放大decimal的位数
追问
听力你的建议。我用isnumeric函数查询后,确实有空白的行。

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

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

没有报算术溢出。
谢谢。
追答
当空字符串 (" ") 转换为 numeric 或 decimal 时,SQL Server 也返回错误。
这是联机丛书上原话,并没有多加解释
个人猜测可能是由于float是近似数,可以忽略转换的精度
而decimal精确类型的精度可能无法对空字符串进行一个精确的转换
chenfenggang99
2014-05-01 · TA获得超过1850个赞
知道大有可为答主
回答量:1746
采纳率:75%
帮助的人:1741万
展开全部
numeric(8,2)//改为
decimal(8,2)
追问
刚试了下,还是出现原来的报错。
我理解的是numeric 和 decimal是一样的,可以互换使用。不知这么理解可以不?
追答
可以这么说,,但是我不出你程序有什么问题,转换是没有问题。。分组也没有问题。。

SELECT [列 0],AVG(cast([列 7] as numeric(8,2)))
FROM [TABLE1]
GROUP BY [列 0] 只运行这些试一试。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式