最近,我遇到了一个异常现象,即在划分两个整数的同时,我只得到了商数,而且只是忽略了提醒。
SELECT 12/8,12%8
上面的查询分别给出1和4,类似于Java / C编程。再次应用下面计算中使用的Java / C编程方法来获得期望值。
SELECT 12.0/8,12/8.0
答案分别为1.5000和1.5000。 处理我的任务我得到一个情况,以获得两个计数值(整数)的百分比值,我坚持使用类似于前一个查询的结果。然后我通过将其中一个值乘以1.0来计算出相同的结果。这解决了我的问题。
但是稍后,通过我的项目(长期开发)中使用的几个脚本,我注意到在某些情况下,即使两个计数值(整数)被分割,也会从查询中返回十进制值。
我在Netezza首先注意到了这一点。但在SQL Server中也是如此。
请告知确定返回值的数据类型的基础。
答案 0 :(得分:0)
当分割两个整数时,它将执行整数除法,它返回一个整数。要执行浮点除法,必须将一个或两个操作数转换为float / decimal / double。
SELECT cast(12 as float)/8
SELECT 12/cast(8 as float)
SELECT cast(12 as float)/cast(8 as float)
SELECT cast(12/8 as float)
请注意,最后一个查询是不同的,因为在转换为float之前首先执行整数除法,这就是十进制值已经丢失的原因。