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

Oracleのremainder()関数の動作を理解する

    ドキュメントを書いた人(算術からいくつかの定義を思い出さないようです)自身は、自分が何を書いたかについて確信が持てないようです。一方では、説明の早い段階で、彼らはROUNDについて言及しています。 -さらに後で、彼らがより正式な定義を与えるとき、彼らは言う

    「最も近い整数」は算術で正式に定義されていません。実際、xの小数部分が正確に0.5である場合を除いて、round(x)にその名前を使用できます。この場合、「最も近い整数」はあいまいであり、次のように選択できます。 「最も近い整数」の独自の定義として「切り捨て」を使用します。

    可能であれば、ドキュメントのこのような矛盾にあまり腹を立てないでください。さらに多くのことが表示されます。

    ただし :さらに悪いのは、動作に一貫性がないことです。 Oracle 12.1を使用していますが、自分のマシンで試したところ、次のようになりました

    remainder(10, 4) =  2
    remainder( 6, 4) = -2
    

    韻や理由はありません。 FLOORなどを使用して、独自の除算を行う方がはるかに優れています。

    編集 -または、何らかの理由があるかもしれません。おそらく、「最も近い整数」の定義を使用して、同点の場合、最も近い偶数を意味します。 整数。それでも予期しない結果が生じるため、OracleのREMAINDER()関数を使用しないことをお勧めします。




    1. Debian/UbuntuでのPostgreSQLレプリケーションセットアップの作成

    2. PostgreSQL-トランザクションがアクティブかどうかを判断する方法は?

    3. Pythonとmysqlを使用する場合、SQLステートメントですべてのパラメーターが使用されたわけではありません

    4. mysqlは以前の値で欠落している日付を生成します