4

私は、SQL で最も近い ODD 整数に丸める必要がある可能性がやや低いことに気付きました。ここで最も近い N (2,5,10 など) に丸める方法については良い解決策がありますが、奇数について明示的には何もありません。Oracle 11gR2 を使用して、Oracle に固有のソリューションがそこにある場合。

*このスタディから削除されたテーブルにデータを結合する必要があります。著者は一貫して 2 のビン幅を使用しましたが、偶数の場合もあれば、奇数の場合もあります。

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

これを行うオラクルの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 に答える
3

算術 OR?

ROUND(3.14,0)|1

編集

Andriy はこれを に正しく修正しFLOOR(3.64)::int|1ます。(正しく動作します)。

于 2012-06-12T20:17:59.527 に答える
0

モジュラスを使用すると、偶数/奇数を見つけるのに役立ちます。偶数に1を足す

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