sql >> データベース >  >> RDS >> Oracle

OracleのREMAINDER()関数

    Oracleでは、REMAINDER() 関数は、最初の引数の余りを2番目の引数で割った値を返します。

    MOD()に似ています ROUND()を使用することを除いて関数 その計算では、MOD() FLOOR()を使用します その計算で。

    構文

    構文は次のようになります:

    REMAINDER(n2, n1)

    各引数は、任意の数値データ型、または暗黙的に数値データ型に変換できる任意の非数値データ型にすることができます。

    次に例を示します:

    SELECT REMAINDER(100, 6)
    FROM DUAL;

    結果:

       REMAINDER(100,6) 
    ___________________ 
                     -2 

    REMAINDER() vs MOD()

    上記の結果は、特にMOD()と比較した場合、予期しないように見える場合があります。 働き。ただし、これはMOD()が原因です。 FLOOR()を使用します REMAINDER()の間、数式で関数 ROUND()を使用します 働き。

    比較した2つの関数は次のとおりです。

    SELECT 
        REMAINDER(100, 6),
        MOD(100, 6)
    FROM DUAL;

    結果:

       REMAINDER(100,6)    MOD(100,6) 
    ___________________ _____________ 
                     -2             4

    この場合、最初の引数の残りを2番目の引数で割った値を返しますが、2つの関数からは大きく異なる結果が得られます。

    何が起こっているのですか?

    おそらくそれについて考える最も簡単な方法は次のようなものです:

    SELECT 
        100/6,
        ROUND(100/6) AS "ROUND()",
        FLOOR(100/6) AS "FLOOR()"
    FROM DUAL;

    結果:

         100/6    ROUND()    FLOOR()
    ---------- ---------- ----------
    16.6666667         17         16

    この場合、ROUND()を使用するかどうかによって、異なる結果が得られます。 またはFLOOR()

    • 17に6を掛けると、102になります。これにより、-2の余りが得られます。
    • 16に6を掛けると、96になります。これにより、余りは4になります。

    6を変更した場合 7に 、両方の関数が同じ結果を返します:

    SELECT 
        REMAINDER(100, 7),
        MOD(100, 7)
    FROM DUAL;

    結果:

       REMAINDER(100,7)    MOD(100,7) 
    ___________________ _____________ 
                      2             2 

    ROUND()は次のとおりです およびFLOOR() 戻る:

    SELECT 
        100/7,
        ROUND(100/7) AS "ROUND()",
        FLOOR(100/7) AS "FLOOR()"
    FROM DUAL;

    結果:

         100/7    ROUND()    FLOOR()
    ---------- ---------- ----------
    14.2857143         14         14

    非数値引数

    引数は、任意の数値データ型、または暗黙的に数値データ型に変換できる任意の非数値データ型にすることができます。

    引数がその基準を満たさない場合に何が起こるかの例を次に示します。

    SELECT REMAINDER('Ponzi', 'Invest')
    FROM DUAL;

    結果:

    Error starting at line : 1 in command -
    SELECT REMAINDER('Ponzi', 'Invest')
    FROM DUAL
    Error report -
    ORA-01722: invalid number

    ヌル引数

    REMAINDER() nullを返します 引数がnullの場合 :

    SET NULL 'null';
    
    SELECT 
        REMAINDER(null, 2),
        REMAINDER(7, null),
        REMAINDER(null, null)
    FROM DUAL;

    結果:

       REMAINDER(NULL,2)    REMAINDER(7,NULL)    REMAINDER(NULL,NULL) 
    ____________________ ____________________ _______________________ 
                    null                 null                    null

    デフォルトでは、SQLclおよびSQL * Plusは、SQL SELECTの結果としてnull値が発生するたびに空白を返します。 声明。

    ただし、SET NULLは使用できます 返される別の文字列を指定します。ここでは、文字列nullを指定しました 返却する必要があります。

    引数がありません

    REMAINDER()を呼び出す 引数の数が間違っているか、引数がない場合、エラーが発生します:

    SELECT REMAINDER()
    FROM DUAL;

    結果:

    Error starting at line : 1 in command -
    SELECT REMAINDER()
    FROM DUAL
    Error at Command Line : 1 Column : 8
    Error report -
    SQL Error: ORA-00909: invalid number of arguments
    00909. 00000 -  "invalid number of arguments"
    *Cause:    
    *Action:

    そして:

    SELECT REMAINDER(10, 2, 3)
    FROM DUAL;

    結果:

    Error starting at line : 1 in command -
    SELECT REMAINDER(10, 2, 3)
    FROM DUAL
    Error at Command Line : 1 Column : 8
    Error report -
    SQL Error: ORA-00909: invalid number of arguments
    00909. 00000 -  "invalid number of arguments"
    *Cause:    
    *Action:

    1. C#を使用したMySQLのパラメーター化されたクエリ

    2. UID12345678のようなSQLで一意のIDを自動的に生成するにはどうすればよいですか?

    3. Oracleのすべてのテーブルのリストを取得しますか?

    4. MySQLのT-SQLのWITHTIESの代替