代码问题:”100.1%”这种带有非数字的字符是不可以转换成numeric的。
改正方法:你可以将数字除以100,变为“1.001”再转换成numeric。 set @lastbl1 =“1.001” set @lastbl2 = CAST( @lastbl1 AS numeric(10,2))
扩展资料:
1.SQL Server中可以使用cast和convert函数进行数据类型的转换。
如:set @lastbl2= CAST( @lastbl1 AS numeric(10,2))
或 set @lastbl2= CONVERT(numeric(10,2),@lastbl1 )
2.cast与convert的不同:convert多用于关于日期时间的转换;cast一般用于小数数值和字符型。
如:select CONVERT(varchar(12) , getdate(),111 ) -- 2017/08/13
参考资料:
百度百科--CAST和CONVERT
1、打开数据库连接客户端Navicat Premium ,创建一个新的表结构,这里age这列 故意 设置为 varchar。
2、创建表成功之后,为刚刚的表创建一些数据。
3、在数据量少的时候可以使用sum()函数直接求和,因为SQL中它可以自动识别是字符串类型还是数字类型。
4、以上适用于整数,或者是数据量小,要是数据量太大,并且精度较高不适用,那么就可以考虑使用SQL 的CAST()和CONVERT()函数。
5、在接着看看CONVERT()函数,这个函数主要是服务于要求精度的需求,这里改改原始的数据,把age列改为带小数的用于测试一下这个函数。
可以用cast来转换
如:列名叫grade,表名为A
select cast(grade as numeric(y,x)) from A
其中y代表数据长度,x代表小数位长度
注意:grade中必须全为数字或小数点,如果存在中文或英文,则运行时会报错。
示例:select cast('10201.210114' as numeric(18,4))
CONVERT 函数和 CAST 函数
语法:
CAST ( expression AS data_type [ (length ) ])
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
例
CAST(varchar列名 AS numeric(10,2))
CONVERT(numeric(10,2), varchar列名)
-- 注意,如果varchar列不是数字会出错
疑问点:你的意图是什么? 那个% 可以直接除以100啊?
18.4% 这个在数据库里面只能是字符类型,如果你要显示18.4,只能在查询结果里面或者程序处理