最好是检查一下现在你数据库里name字段里的值
如果不能改动
我建议你在后面加个条件
select sum(convert(int,substring(name,1,3))) as tt from table
where (left(name,1)>='0' and left(name,1)<='9' ) and
(left(name,2)>='0' and left(name,2)<='9' ) and
(left(name,3)>='0' and left(name,3)<='9' ) and
(left(name,1)>='0' and left(name,1)<='9' )
//这样保证了substring(name,1,3)肯定是正确的,不过效率会降低!!
因为left函数会有大量的耗费
Onedot 你的写法完全可以简化嘛! 还不容易出错! 看:
select sum(Convert(int ,substring(Name,1,3))) as tt from Table
where isnumeric(substring(Name,1,3))=1
你的有点错!我不明白错在哪?我有意将一个记录改成了非数字的。
运行ZML的语句时与本人的语句(select sum(convert(int,substring(name,1,3))) as tt from table
)
出现同样的错误:syntax error converting the varchar value'0:' to a column of data type int.
不能通过,substring(name,6,3)值保正是数值(或3位''值),有时数值后面可能有1或2位''值.
Onedot和随风飘马的写法也不行.希望各位大虾继续指教!
我测试了一下,如果是NAME字段内容是“罚款:100”
他的写法应该是
select sum(convert(int,substring(name,4,3))) as tt from table1
where isnumeric(substring(Name,4,3))=1
而不是substring(name,6,3)!!!
//这里的原因可能和MS SQL对汉字的处理不是我们想象的那样