VB开发程序发现sql输入后1+1不是=2还是=11。
发布网友
发布时间:2024-09-07 04:32
我来回答
共3个回答
热心网友
时间:2024-09-13 19:46
首先,你要了解字符串与数字的区别。两个字符串用“+”相连,有时候不会进行数学运算,只会将两个字符串合并在一起。
如“150” + “140”=“150140”;你看看你数据库里面“期末余额”字段的数据类型。如果是字符串的话,将其转换成数字类型后就可以了:转换(convert函数)为数字型(float),再相加convert(float,余额)
select (convert(float,报表1.b期末余额) + convert(float,报表.b期末余额))
或者改变字段的数据类型:
ALTER TABLE 表名 ALTER COLUMN 字段名 新的数据类型 NULL或NOT NULL (推荐使用)
select (报表1.b期末余额 + 报表.b期末余额)as 期末余额 from 报表1,报表 where 报表.zc=报表1.zc
前者只能治标,后者却能治本,看你个人喜欢那一种了
建议:相对于金额而言,最好使用货币型的数据类型,虽然用其他的类型有时候也可以,但作为一个数据库开发人员而言,针对不同的数据,选择正确的数据类型,那样会更加的专业,而且可以避免好多不必要的错误或者麻烦。
希望我的答案能够令你满意
热心网友
时间:2024-09-13 19:48
我试过你的例子,能正常计算出来呀,是不是字段的数据类型不对呀。
注意:报表1的b必须是int(或bigint、smallint、tinyint、decimal、numeric) 的数据类型 否则,(像varchar类型的数据)会认为是字符串相加了。
最好的解决办法是:
将你要相加的每个部分都转换成int类型(bigint等他数据类型),用类型转换函数convert(要转换成的数据类型,将要执行转换的数据) 即可。
即
select convert(int,报表1.b期末余额) + convert(int,报表.b期末余额) as 期末余额 from 报表1,报表 where 报表.zc=报表1.zc
还有一个解决办法是在求和的表达式用abs函数()括起来,这是求绝对值的函数,这里只能局限于期末余额都大于等于0的情况。
希望你能早点做出来,呵呵、、
热心网友
时间:2024-09-13 19:53
因为你的"余额"不是数字型,而是字符串,所以"+"的作用是连接字符串.
必须显示转换(convert函数)为数字型(float),再相加
convert(float,余额)
select (convert(float,报表1.b期末余额) + convert(float,报表.b期末余额))