日期:2014-05-18  浏览次数:20591 次

看下这条语句为什么报错
update kh set kh.客户年龄=2012-substring(khb.身份证,7,4) from kh,khb where kh.客户姓名=khb.客户姓名

执行报: "varchar 值 '5)36' 转换为数据类型为 int 的列时发生语法错误。"


而执行 select 2012-substring(khb.身份证,7,4) from khb 一切正常,谁知道这是什么问题吗
 

------解决方案--------------------
SQL code

update kh set kh.客户年龄=2012-casr(substring(khb.身份证,7,4) as int) 
from kh,khb where kh.客户姓名=khb.客户姓名

------解决方案--------------------
你的身份证里面有非法数据,年份的4列有5)36这样的数据存在,你执行正常的没有赋值操作所以不报错,报错是因为截取的要付给整形变量所以报错。
------解决方案--------------------
SQL code
update kh set kh.客户年龄=2012-convert(int,substring(khb.身份证,7,4)) from kh,khb where kh.客户姓名=khb.客户姓名

------解决方案--------------------
SQL code

update kh set kh.客户年龄=2012-cast(substring(khb.身份证,7,4) as int) 
from kh,khb where kh.客户姓名=khb.客户姓名