Oracle SQL 関数 : FLOOR : 指定数値の最大整数値

 numberRet := FLOOR( numberSrc );

 FLOOR関数は数値データ numberSrc 以下の最も大きい整数を返します。
  numberSrc が小数点以下の値があれば、numberSrc より小さくて最も近い整数を返し、
  numberSrc が小数点以下の値が無ければ、numberSrc そのものを返します。

以下に「小数点以下を含んだ正の値」「小数点以下を含んだ負の値」「小数点以下のない値」「数値を表す文字列」の例を示します。

SQL> SELECT
  2      FLOOR( 12356.15)  AS "正の値"
  3     ,FLOOR(-12356.15)  AS "負の値"
  4     ,FLOOR( 12356   )  AS "小数点以下無し"
  5     ,FLOOR('12356.15') AS "数値を表す文字列"
  6  FROM DUAL;

    正の値     負の値 小数点以下無し 数値を表す文字列
---------- ---------- -------------- ----------------
     12356     -12357          12356            12356

上の例で指定された値が の場合は直感的に分かりやすいのですが、 の場合は少し戸惑います。(私の場合ですが)

上記の「-12356.15」についてですが、数直線上で考えて「-12356.15」より、 もっと「0」から遠くなる方向で考えれば FLOOR 関数の結果が「-12357」になることが理解できます。


FLOOR 関数は取り得る値が、数値に変換できるデータのため、以下の様な場合にはエラーが返されます。

SQL> SELECT
  2      FLOOR('abcdefgh') AS "数値ではない文字列"
  3  FROM DUAL;
    FLOOR('abcdefgh') AS "数値ではない文字列"
          *
行2でエラーが発生しました。:
ORA-01722: 数値が無効です。