SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

MySQL 編13 - 数値関数、余り、四捨五入、切り捨て、切り上げ、数値書式

■絶対値

  ・abs() 関数は、絶対値を返す。

select abs(-123);

+-----------+
| abs(-123) |
+-----------+
|       123 |
+-----------+

select key1, abs(data1) from testm;

■余り

  ・mod() 関数は、余りを返す。

select mod(123, 10);

+--------------+
| mod(123, 10) |
+--------------+
|            3 |
+--------------+

select key1, mod(data1, 10) from testm;

■四捨五入

  ・round() 関数は、四捨五入結果を返す。

【注意】round(10.345, 2) の結果は 10.35 になるはすが、10.34 が返って
        くる。MySQL のバグ? round は信用できないものを感じた。
        truncate(10.345 + .005, 2) を使用する方が無難かもしれない。

【追加情報】Banker's Rounding と呼ばれる規則で丸められているとのこと。
            原則四捨五入だが、5 の時は、偶数側を選ぶとのことです。

select round(10.345, 2);

+------------------+
| round(10.345, 2) |
+------------------+
|            10.34 | **** おかしい!!
+------------------+

select truncate(10.345 + .005, 2);

+----------------------------+
| truncate(10.345 + .005, 2) |
+----------------------------+
|                      10.35 |
+----------------------------+

select round(10.346, 2);

+------------------+
| round(10.346, 2) |
+------------------+
|            10.35 |
+------------------+

select key1, round(data1, 2) from testm;

■切り捨て

  ・truncate() 関数は、切り捨て結果を返す。

select truncate(10.349, 2);

+---------------------+
| truncate(10.349, 2) |
+---------------------+
|               10.34 |
+---------------------+

select key1, truncate(data1, 2) from testm;

■切り上げ

  ・truncate() に +9 すれば良いでしょう。
    この例では、小数第 1 位を切り上げたと同じ結果になります。

select truncate(10.345 + .9, 0);

+--------------------------+
| truncate(10.345 + .9, 0) |
+--------------------------+
|                       11 |
+--------------------------+

  未満切り上げの場合は、+99... など工夫します。
  次の例は、固定小数部 6 桁を小数部 2 桁未満で切り上げしています。

select truncate(10.345678 + .009999, 2);

+----------------------------------+
| truncate(10.345678 + .009999, 2) |
+----------------------------------+
|                            10.35 |
+----------------------------------+

■以上で最小の整数

  ・ceil() 関数は、引数に対して、それ以上で、最小の整数値を返す。
    マイナス値に対しては、四捨五入のように動作しないので注意のこと。

select
  ceil(10.345), ceil(-10.345),
  truncate(10.345 + .9, 0) t1, truncate(-10.345 + .9, 0) t2 -- 小数第一位切り上げ
;

+--------------+---------------+----+----+
| ceil(10.345) | ceil(-10.345) | t1 | t2 |
+--------------+---------------+----+----+
|           11 |           -10 | 11 | -9 |
+--------------+---------------+----+----+

■以下で最大の整数

  ・floor() 関数は、引数に対して、それ以下で、最小の整数値を返す。
    マイナス値に対しては、四捨五入のように動作しないので注意のこと。

select
  floor(10.345), floor(-10.345),
  truncate(10.345, 0) t1, truncate(-10.345, 0) t2
;

+---------------+----------------+----+-----+
| floor(10.345) | floor(-10.345) | t1 | t2  |
+---------------+----------------+----+-----+
|            10 |            -11 | 10 | -10 |
+---------------+----------------+----+-----+

■スクエアルート

  ・sqrt() 関数は、平方根を返す。

select sqrt(2.0);

      sqrt
-----------------
 1.4142135623731

■べき乗

  ・pow() 関数は、べき乗を返す。
    この例では、2^8 が返る。

select pow(2, 8);

+------------+
| pow(2, 8)  |
+------------+
| 256.000000 |
+------------+

■数値から文字列へ変換 (数値フォーマット、書式変換)

  ・文字列としての結合は concat() を使用する。

select concat(123456, 789012);

+------------------------+
| concat(123456, 789012) |
+------------------------+
| 123456789012           |
+------------------------+

select concat('123456', 789012);

+--------------------------+
| concat('123456', 789012) |
+--------------------------+
| 123456789012             |
+--------------------------+

select concat('123456', '789012');

+----------------------------+
| concat('123456', '789012') |
+----------------------------+
| 123456789012               |
+----------------------------+

  ・三桁毎にカンマを付けるには、次のようにする。

select format(123456, 0);

+-------------------+
| format(123456, 0) |
+-------------------+
| 123,456           |
+-------------------+

select format(123456, 2);

+-------------------+
| format(123456, 2) |
+-------------------+
| 123,456.00        |
+-------------------+

■文字列から数値へ変換

  ・勝手にやるみたいです。

select '0123' + 100;

+--------------+
| '0123' + 100 |
+--------------+
|          223 |
+--------------+

select '0123' + '100';

+----------------+
| '0123' + '100' |
+----------------+
|            223 |
+----------------+

■型変換

  ・cast() 関数は、ANSI 規程の変換関数です。

select cast(concat('123', '456') as signed);

+--------------------------------------+
| cast(concat('123', '456') as signed) |
+--------------------------------------+
|                               123456 |
+--------------------------------------+

select cast(concat('-123', '456') as unsigned);

+-----------------------------------------+
| cast(concat('-123', '456') as unsigned) |
+-----------------------------------------+
|                    18446744073709428160 |
+-----------------------------------------+

select cast(123 + 100 as char);

+-------------------------+
| cast(123 + 100 as char) |
+-------------------------+
| 223                     |
+-------------------------+

■MySQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK