我发现自己有点不太可能*需要在SQL中舍入到最接近的ODD整数。有一个很好的解决方案,如何舍入到最近的N(2,5,10等)here,但没有明确的奇数。使用Oracle 11gR2,如果有特定于Oracle的解决方案。
*需要将我的数据加入从此study中剥离的表格。作者使用了一致的bin宽度为2 ...但有时它甚至是偶数,而有些则是奇怪的。
答案 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)
答案 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