私は、SQL で最も近い ODD 整数に丸める必要がある可能性がやや低いことに気付きました。ここで最も近い N (2,5,10 など) に丸める方法については良い解決策がありますが、奇数について明示的には何もありません。Oracle 11gR2 を使用して、Oracle に固有のソリューションがそこにある場合。
*このスタディから削除されたテーブルにデータを結合する必要があります。著者は一貫して 2 のビン幅を使用しましたが、偶数の場合もあれば、奇数の場合もあります。
次のようなことができます。
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
これを行うオラクルの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