舍入到SQL中最接近的奇数

时间:2012-06-12 20:04:08

标签: sql rounding

我发现自己有点不太可能*需要在SQL中舍入到最接近的ODD整数。有一个很好的解决方案,如何舍入到最近的N(2,5,10等)here,但没有明确的奇数。使用Oracle 11gR2,如果有特定于Oracle的解决方案。

*需要将我的数据加入从此study中剥离的表格。作者使用了一致的bin宽度为2 ...但有时它甚至是偶数,而有些则是奇怪的。

5 个答案:

答案 0 :(得分:4)

你可以这样做:

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;
/

有时直截了当是最好的,因为跟在你后面的人会明白发生了什么。

答案 1 :(得分:4)

我认为你不需要案例陈述,这应该这样做:

SELECT 
   ROUND((11.9-1)/2,0)*2+1
FROM DUAL

答案 2 :(得分:3)

算术OR?

ROUND(3.14,0)|1

修改

Andriy正确地将此更正为FLOOR(3.64)::int|1。 (有效correctly)。

答案 3 :(得分:3)

这是一个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;

答案 4 :(得分:0)

使用模数可以帮助您找到偶数/奇数。将1添加到偶数

select
    case when (value % 2) <> 0 then value
    else value + 1 end
from table