SAK 図書館
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 編資料