4

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

*需要将我的数据加入到从这项研究中剥离的表格中。作者使用了 2 的一致 bin 宽度……但有时它是偶数,而另一些则是奇数。

4

5 回答 5

5

你可以这样做:

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

有时直截了当是最好的,因为追随你的人会明白发生了什么。

于 2012-06-12T20:10:59.280 回答
4

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

SELECT 
   ROUND((11.9-1)/2,0)*2+1
FROM DUAL
于 2012-06-12T20:35:32.857 回答
3

算术或?

ROUND(3.14,0)|1

编辑

Andriy 正确地将其更正为FLOOR(3.64)::int|1. (正常工作)。

于 2012-06-12T20:17:59.527 回答
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;
于 2012-06-12T20:27:47.263 回答
0

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

select
    case when (value % 2) <> 0 then value
    else value + 1 end
from table
于 2012-06-12T20:12:19.670 回答