我发现自己有点不太可能*需要四舍五入到 SQL 中最接近的 ODD 整数。这里有一个很好的解决方案来解决如何四舍五入到最近的 N(2,5,10 等),但没有明确说明奇数。如果有特定于 Oracle 的解决方案,请使用 Oracle 11gR2。
*需要将我的数据加入到从这项研究中剥离的表格中。作者使用了 2 的一致 bin 宽度……但有时它是偶数,而另一些则是奇数。
你可以这样做:
DECLARE
n FLOAT;
BEGIN
n := 195.8;
SELECT
CASE
WHEN mod(FLOOR(n),2) = 0 THEN FLOOR(n)+1
ELSE FLOOR(n)
END NUM
INTO n
FROM DUAL;
dbms_output.put_line(to_char(n));
END;
/
有时直截了当是最好的,因为追随你的人会明白发生了什么。
我认为您不需要案例陈述,应该这样做:
SELECT
ROUND((11.9-1)/2,0)*2+1
FROM DUAL
这是一个可以执行此操作的 oracle PL/SQL 函数:
CREATE OR REPLACE FUNCTION ROUNDODD
(
IMPNUM IN NUMBER
) RETURN NUMBER AS
roundnum number;
oddnum number;
BEGIN
roundnum := round (IMPNUM,0);
IF mod(roundnum,2) = 1
THEN RETURN roundnum;
ELSE
IF roundnum > IMPNUM
THEN RETURN roundnum-1;
ELSE RETURN roundnum+1;
end if;
end if;
END ROUNDODD;
使用模数可以帮助您找到偶数/奇数。偶数加 1
select
case when (value % 2) <> 0 then value
else value + 1 end
from table