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中没有字母,全是字符串型的数字。
错在哪里了? 展开
FROM [TABLE1]
GROUP BY [列 0]
having avg(cast([列 7] as decimal(8,2)))>60;
报错:从数据类型 varchar 转换为 numeric 时出错。
注:原始表格中的列7中没有字母,全是字符串型的数字。
错在哪里了? 展开
2个回答
展开全部
是报的算术溢出还是就只是报错?
可以用where isnumeric(列7)=0 查看一下哪些不能转换为数字
如果是算术溢出,那可以放大decimal的位数
可以用where isnumeric(列7)=0 查看一下哪些不能转换为数字
如果是算术溢出,那可以放大decimal的位数
追问
听力你的建议。我用isnumeric函数查询后,确实有空白的行。
但是,还有一个疑问:为什么转换位float型就不报错,而转decimal或numeric 时就会报错呢?
报错:从数据类型 varchar 转换为 numeric 时出错。
没有报算术溢出。
谢谢。
追答
当空字符串 (" ") 转换为 numeric 或 decimal 时,SQL Server 也返回错误。
这是联机丛书上原话,并没有多加解释
个人猜测可能是由于float是近似数,可以忽略转换的精度
而decimal精确类型的精度可能无法对空字符串进行一个精确的转换
展开全部
numeric(8,2)//改为
decimal(8,2)
decimal(8,2)
追问
刚试了下,还是出现原来的报错。
我理解的是numeric 和 decimal是一样的,可以互换使用。不知这么理解可以不?
追答
可以这么说,,但是我不出你程序有什么问题,转换是没有问题。。分组也没有问题。。
SELECT [列 0],AVG(cast([列 7] as numeric(8,2)))
FROM [TABLE1]
GROUP BY [列 0] 只运行这些试一试。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询