Sql 中两个数除法计算结果等于0原因是什么?

问题

今天执行一个存储过程的时候, 发现执行结果和预期的结果不一致, 但是存储过程并没有发生错误!于是就一句一句的去查找问题,最后发现是在对两个数字进行除法计算的时候产生的问题。我惊奇的发现 138 / 365 竟然等于 0。 我第一反应就是精度的问题(毕竟javaScript 也有类似的问题)。

来验证一下这个结论:
Sql 中两个数除法计算结果等于0原因是什么?
结果显而易见, 就是由于计算精度造成的。这是因为SQL Server会自动根据除数与被除数的最大精度去对运算结果取精度,这里的除数和被除数都是整数,所以得到的结果也是整数

如果不信, 我们再来试试
Sql 中两个数除法计算结果等于0原因是什么?

解决办法

可以通过在整数后面加上.0 来改变精度。也可以通过 Convert 函数来讲整数转换成其他的类型后进行计算。

-- 方法一
SELECT  138.0 / 365.0 Result1

--方法二
SELECT  ( CONVERT(FLOAT, 138) / CONVERT(FLOAT, 365) ) Result2
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 可以使用以下 SQL 语句计算个表数的比值: SELECT COUNT(*) AS table1_count, (SELECT COUNT(*) FROM table2) AS table2_count, COUNT(*)/(SELECT COUNT(*) FROM table2) AS ratio FROM table1; 这个 SQL 语句会返回个表的行数以及它们的比值。 ### 回答2: 要查个表数的比值,可以使用SQL语言的JOIN操作符和计算函数来实现。 假设我们有个表A和B,它们的结构如下所示: 表A: id | value ------------ 1 | 100 2 | 200 3 | 300 表B: id | value ------------ 1 | 50 2 | 150 3 | 250 我们的目标是计算表A每个id对应的value值与表B对应id的value值的比值。 可以使用如下SQL查询语句来实现: SELECT A.id, A.value/B.value AS ratio FROM A JOIN B ON A.id = B.id 这条查询语句使用了JOIN操作符将表A和表B连接起来,连接条件为A表和B表的id相等。 然后,使用计算函数将表A的value值除以表B对应id的value值,得到比值。 最后,使用SELECT语句选择出需要的字段,其包括A表的id和计算得到的比值字段,并将结果返回。 执行上述查询语句后,将得到以下结果: id | ratio ------------ 1 | 2 2 | 1.333 3 | 1.2 这些结果是表A每个id对应的value值与表B对应id的value值的比值。其,id为1的比值为2,表示表Aid为1的value值是表B对应id的value值的2倍;id为2的比值为1.333,表示表Aid为2的value值是表B对应id的value值的1.333倍;id为3的比值为1.2,表示表Aid为3的value值是表B对应id的value值的1.2倍。 ### 回答3: SQL是一种用于管理关系型数据库的语言,可以通过使用SELECT语句从多个表检索数据,并通过执行数学计算来计算个表数的比值。 假设有个表A和B,表A有一个列A_value,表B有一个列B_value,我们想要计算A_value和B_value之间的比值。 首先,我们可以使用SELECT语句从表A和表B检索相应的列: ``` SELECT A_value, B_value FROM A, B ``` 接下来,我们可以使用计算函数来计算每一行A_value和B_value的比值。可以使用除法运算符“/”来执行个值之间的除法运算: ``` SELECT A_value / B_value AS ratio FROM A, B ``` 在这个示例,我们将计算结果存储在一个新的列ratio。通过将A_value除以B_value,我们将计算出A_value和B_value之间的比值。 最后,我们可以将结果返回给用户,以便查看计算的比值: ``` SELECT A_value, B_value, A_value / B_value AS ratio FROM A, B ``` 通过这个SELECT语句,我们将得到一个结果集,其包含表A和表B的每一行,以及它们之间的比值。这样用户就可以查看个表数的比值了。 总结起来,我们可以使用SELECT语句和除法运算符来计算个表数的比值。首先使用SELECT语句从表检索所需的列,然后使用除法运算符来执行计算,并将结果存储在一个新的列。最后将结果返回给用户以供查看。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖太乙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值