小数点引起的数据类型转换问题
2013-05-23 13:30
127 查看
同事运行一段sql报错,显示:无法从varcahr转化为numeric。此字段是varchar型。
本文出自 “探索SQLServer” 博客,请务必保留此出处http://yupeigu.blog.51cto.com/3323001/1368077
--1. 报错:无法从varcahr转化为numeric SELECT sum(CAST(jg AS NUMERIC(10,2))) FROM RPT_DIST_RULE --2. 还是会报错 SELECT sum(CAST(jg AS NUMERIC(10,2))) FROM RPT_DIST_RULE WHERE isnumeric(jg) = 1 --只过滤数值 --3. 没有返回记录,说明jg字段中不包含空格 SELECT sum(CAST(jg AS NUMERIC(10,2))) FROM RPT_DIST_RULE WHERE jg LIKE '% %' --等于空格 --4. 计算此字段的长度 SELECT jg, len(jg) FROM RPT_DIST_RULE --4.2 进一步通过去重,缩小数据条数,这样更容易发现错误数据 -- 按照此字段的长度从小到大排序,发现有的字符串为'.'或'.5' SELECT DISTINCT jg, len(jg) FROM RPT_DIST_RULE ORDER BY 2 --5.1 验证了确实当字符串为'.'时,进行转化会报错 SELECT CAST(a AS NUMERIC(10,2)) from ( SELECT '.' a )a --5.2 而当字符串为'.5'时,转化不会报错 SELECT CAST(a AS NUMERIC(10,2)) from ( SELECT '.5' a )a --5.3 另外,在用isnumeric函数判断一个字符串是否为数值时,都会返回1,也就是都是数值 SELECT a, isnumeric(a) from ( SELECT '.5' a UNION ALL SELECT '.' a )a --6. 本质上,这种错误是由于客户端没有控制好导致的,客户端可以通过正则表达式来限制输入字符 -- 对于本例,直接通过把'.'更新为'0'来解决。 UPDATE RPT_DIST_RULE SET jg = '0' WHERE jg = '.'
本文出自 “探索SQLServer” 博客,请务必保留此出处http://yupeigu.blog.51cto.com/3323001/1368077
相关文章推荐
- 小数点引起的数据类型转换问题
- dsp调试中数据类型自动转换遇到的问题
- 强制数据类型转换问题
- Ado方式导入excel混用数据类型引起数据缺失问题解决方法
- 解决问题:SSIS中,列“column”无法在 unicode和非unicode字符串数据类型之间转换
- java与json互相转换(解决日期问题),js显示json数据时出现日期类型显示[object,object]现象解决!
- Java左右移位操作和数据类型转换时的溢出问题
- easyui-datagrid关于展示的字段需要进行数据类型转换的问题(自己记录备忘)
- 解决项目中由于前端页面数据类型跟数据库类型不一致,导致获取数据为空引起问题
- c/c++语言数据类型转换的方式及常见问题【绝笔整理】
- 数据类型转换问题
- 简单问题(1)---数据类型转换的潜规则
- matlab数据类型转换遇到问题,及解决办法,sym,double ,vpa转换
- java中不同类型数据运算时转换问题
- 一个类型转换而引起的三级事件的一些思考 数据检查
- 黑马程序员--数据类型转换问题
- [ZT]TBuf 和 Hbufc数据类型的相互转换问题
- nvelocity模版数据类型自动转换的问题
- SQL的bit列名转换成access是/否数据类型,True无效的问题
- Access中SQL查询的数据类型转换问题