在RedShift中,在函数内部执行乘法/除法时,操作顺序会影响结果。
select cast((52*100/100) as decimal(4,1)); -- Correctly returns 52.0
select cast((52/100*100) as decimal(4,1)); -- Incorrectly returns 0.0
我希望RedShift首先使用BEDMAS评估括号,无论是case 1: 100/100=1*52=52
还是case 2: 52/100=0.52*100=52
。我已尝试过其他操作以及RedShift:TRUNC,ROUND等,它们都做同样的事情。
为什么第二个会导致0.0?
答案 0 :(得分:2)
一切都是正确的。 /
是integer division:
/ 除法(整数除法截断结果)
select cast((52.0/100*100) as decimal(4,1)); -- making 52 as 52.0
-- 52.0
<强> DBFiddle Demo 强>
第一种情况:
52*100/100 => 5200 / 100 => 52
第二种情况:
52/100*100 => 0 * 100 => 0