Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


12.6.2 数学関数

表 12.12 数学関数

名前 説明
ABS() 絶対値を返します
ACOS() アークコサインを返します
ASIN() アークサインを返します
ATAN() アークタンジェントを返します
ATAN2(), ATAN() 2 つの引数のアークタンジェントを返します
CEIL() 引数以上のもっとも小さな整数値を返します
CEILING() 引数以上のもっとも小さな整数値を返します
CONV() 数値を異なる基数間で変換します
COS() コサインを返します
COT() コタンジェントを返します
CRC32() 巡回冗長検査値を計算します
DEGREES() ラジアンを角度に変換します
EXP() 累乗します
FLOOR() 引数以下のもっとも大きな整数値を返します
LN() 引数の自然対数を返します
LOG() 最初の引数の自然対数を返します
LOG10() 引数の底 10 の対数を返します
LOG2() 引数の底 2 の対数を返します
MOD() 余りを返します
PI() pi の値を返します
POW() 指定した指数で累乗された引数を返します
POWER() 指定した指数で累乗された引数を返します
RADIANS() ラジアンに変換された引数を返します
RAND() ランダムな浮動小数点値を返します
ROUND() 引数を丸めます
SIGN() 引数の符号を返します
SIN() 引数のサインを返します
SQRT() 引数の平方根を返します
TAN() 引数のタンジェントを返します
TRUNCATE() 指定された小数点以下の桁数に切り捨てます

すべての数学関数は、エラーの発生時に NULL を返します。

  • ABS(X)

    X の絶対値を返します。

    mysql> SELECT ABS(2);
            -> 2
    mysql> SELECT ABS(-32);
            -> 32

    この関数は、BIGINT 値でも安全に使用できます。

  • ACOS(X)

    X のアークコサイン (つまり、コサインが X である値) を返します。X-1 から 1 までの範囲内にない場合は、NULL を返します。

    mysql> SELECT ACOS(1);
            -> 0
    mysql> SELECT ACOS(1.0001);
            -> NULL
    mysql> SELECT ACOS(0);
            -> 1.5707963267949
  • ASIN(X)

    X のアークサイン (つまり、サインが X である値) を返します。X-1 から 1 までの範囲内にない場合は、NULL を返します。

    mysql> SELECT ASIN(0.2);
            -> 0.20135792079033
    mysql> SELECT ASIN('foo');
    
    +-------------+
    | ASIN('foo') |
    +-------------+
    |           0 |
    +-------------+
    1 row in set, 1 warning (0.00 sec)
    
    mysql> SHOW WARNINGS;
    +---------+------+-----------------------------------------+
    | Level   | Code | Message                                 |
    +---------+------+-----------------------------------------+
    | Warning | 1292 | Truncated incorrect DOUBLE value: 'foo' |
    +---------+------+-----------------------------------------+
  • ATAN(X)

    X のアークタンジェント (つまり、タンジェントが X である値) を返します。

    mysql> SELECT ATAN(2);
            -> 1.1071487177941
    mysql> SELECT ATAN(-2);
            -> -1.1071487177941
  • ATAN(Y,X), ATAN2(Y,X)

    2 つの変数 X および Y のアークタンジェントを返します。これは、両方の引数の符号が結果の象限の判定に使用される点を除いて、Y / X のアークタンジェントの計算と同様です。

    mysql> SELECT ATAN(-2,2);
            -> -0.78539816339745
    mysql> SELECT ATAN2(PI(),0);
            -> 1.5707963267949
  • CEIL(X)

    CEIL()CEILING() のシノニムです。

  • CEILING(X)

    X 以上で最小の整数値を返します。

    mysql> SELECT CEILING(1.23);
            -> 2
    mysql> SELECT CEILING(-1.23);
            -> -1

    引数が厳密値数値の場合は、戻り値の型も厳密値数値になります。引数が文字列または浮動小数点の場合は、戻り値の型が浮動小数点になります。

  • CONV(N,from_base,to_base)

    数値を異なる基数間で変換します。基数 from_base から基数 to_base に変換された数値 N の文字列表現を返します。引数のいずれかが NULL である場合は、NULL を返します。引数 N は整数として解釈されますが、整数または文字列として指定される場合もあります。最小の基数は 2 で、最大の基数は 36 です。to_base が負の数字である場合は、N は符号付きの数字とみなされます。それ以外の場合は、N は符号なしとみなされます。CONV() は 64 ビット精度で動作します。

    mysql> SELECT CONV('a',16,2);
            -> '1010'
    mysql> SELECT CONV('6E',18,8);
            -> '172'
    mysql> SELECT CONV(-17,10,-18);
            -> '-H'
    mysql> SELECT CONV(10+'10'+'10'+0xa,10,10);
            -> '40'
  • COS(X)

    X のコサインを返します。X はラジアンで指定されます。

    mysql> SELECT COS(PI());
            -> -1
  • COT(X)

    X のコタンジェントを返します。

    mysql> SELECT COT(12);
            -> -1.5726734063977
    mysql> SELECT COT(0);
            -> NULL
  • CRC32(expr)

    巡回冗長検査値を計算し、32 ビット値の符号なし値を返します。引数が NULL である場合は、結果も NULL になります。引数は文字列であると想定され、(可能な場合は) 文字列でない場合でも文字列として処理されます。

    mysql> SELECT CRC32('MySQL');
            -> 3259397556
    mysql> SELECT CRC32('mysql');
            -> 2501908538
  • DEGREES(X)

    ラジアンからディグリーに変換された引数 X を返します。

    mysql> SELECT DEGREES(PI());
            -> 180
    mysql> SELECT DEGREES(PI() / 2);
            -> 90
  • EXP(X)

    e (自然対数の底) の X 乗の値を返します。この関数の逆は、(単一の引数のみを使用する) LOG() または LN() です。

    mysql> SELECT EXP(2);
            -> 7.3890560989307
    mysql> SELECT EXP(-2);
            -> 0.13533528323661
    mysql> SELECT EXP(0);
            -> 1
  • FLOOR(X)

    X 以下で最大の整数値を返します。

    mysql> SELECT FLOOR(1.23);
            -> 1
    mysql> SELECT FLOOR(-1.23);
            -> -2

    引数が厳密値数値の場合は、戻り値の型も厳密値数値になります。引数が文字列または浮動小数点の場合は、戻り値の型が浮動小数点になります。

  • FORMAT(X,D)

    数値 X'#,###,###.##' のような書式に変換し、小数点第 D 位に丸めて、その結果を文字列として返します。詳細は、セクション12.5「文字列関数」を参照してください。

  • HEX(N_or_S)

    この関数を使用すると、10 進数または文字列の 16 進表現を取得できます。その方法は、引数の型によって異なります。詳細は、セクション12.5「文字列関数」で、この関数の説明を参照してください。

  • LN(X)

    X の自然対数 (つまり、X の底 e の対数) を返します。X が 0 以下である場合は、NULL が返されます。

    mysql> SELECT LN(2);
            -> 0.69314718055995
    mysql> SELECT LN(-2);
            -> NULL

    この関数は LOG(X) のシノニムです。この関数の逆は、EXP() 関数です。

  • LOG(X), LOG(B,X)

    1 つのパラメータで呼び出される場合、この関数は X の自然対数を返します。X が 0 以下である場合は、NULL が返されます。

    この関数 (単一の引数で呼び出された場合) の逆は、EXP() 関数です。

    mysql> SELECT LOG(2);
            -> 0.69314718055995
    mysql> SELECT LOG(-2);
            -> NULL

    この関数が 2 つのパラメータで呼び出される場合は、B を底とする X の対数が返されます。X が 0 以下である場合、または B が 1 以下である場合は、NULL が返されます。

    mysql> SELECT LOG(2,65536);
            -> 16
    mysql> SELECT LOG(10,100);
            -> 2
    mysql> SELECT LOG(1,100);
            -> NULL

    LOG(B,X)LOG(X) / LOG(B) と同等です。

  • LOG2(X)

    X の底 2 の対数を返します。

    mysql> SELECT LOG2(65536);
            -> 16
    mysql> SELECT LOG2(-100);
            -> NULL

    LOG2() は、格納に必要なビット数を調べる際に役立ちます。この関数は式 LOG(X) / LOG(2) と同等です。

  • LOG10(X)

    X の底 10 の対数を返します。

    mysql> SELECT LOG10(2);
            -> 0.30102999566398
    mysql> SELECT LOG10(100);
            -> 2
    mysql> SELECT LOG10(-100);
            -> NULL

    LOG10(X)LOG(10,X) と同等です。

  • MOD(N,M)N % MN MOD M

    モジュロ演算。M で除算された N の余りを返します。

    mysql> SELECT MOD(234, 10);
            -> 4
    mysql> SELECT 253 % 7;
            -> 1
    mysql> SELECT MOD(29,9);
            -> 2
    mysql> SELECT 29 MOD 9;
            -> 2

    この関数は、BIGINT 値でも安全に使用できます。

    MOD() は、小数部を持つ値でも機能し、除算後の正確な余りを返します。

    mysql> SELECT MOD(34.5,3);
            -> 1.5

    MOD(N,0)NULL を返します。

  • PI()

    π (pi) の値を返します。表示されるデフォルトの小数点以下の桁数は 7 ですが、MySQL では内部的に全倍精度値が使用されます。

    mysql> SELECT PI();
            -> 3.141593
    mysql> SELECT PI()+0.000000000000000000;
            -> 3.141592653589793116
  • POW(X,Y)

    XY 乗の値を返します。

    mysql> SELECT POW(2,2);
            -> 4
    mysql> SELECT POW(2,-2);
            -> 0.25
  • POWER(X,Y)

    これは POW() のシノニムです。

  • RADIANS(X)

    ディグリーからラジアンに変換された引数 X を返します。

    注記

    π ラジアンは、180 ディグリーと同等です。

    mysql> SELECT RADIANS(90);
            -> 1.5707963267949
  • RAND(), RAND(N)

    0 <= v < 1.0 の範囲内で、ランダムな浮動小数点値 v を返します。定数整数引数 N が指定されている場合は、カラム値の反復可能なシーケンスを生成するシード値として使用されます。次の例では、RAND(3) で生成される値のシーケンスが、発生した両方の場所で同じです。

    mysql> CREATE TABLE t (i INT);
    Query OK, 0 rows affected (0.42 sec)
    
    mysql> INSERT INTO t VALUES(1),(2),(3);
    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
    mysql> SELECT i, RAND() FROM t;
    +------+------------------+
    | i    | RAND()           |
    +------+------------------+
    |    1 | 0.61914388706828 |
    |    2 | 0.93845168309142 |
    |    3 | 0.83482678498591 |
    +------+------------------+
    3 rows in set (0.00 sec)
    
    mysql> SELECT i, RAND(3) FROM t;
    +------+------------------+
    | i    | RAND(3)          |
    +------+------------------+
    |    1 | 0.90576975597606 |
    |    2 | 0.37307905813035 |
    |    3 | 0.14808605345719 |
    +------+------------------+
    3 rows in set (0.00 sec)
    
    mysql> SELECT i, RAND() FROM t;
    +------+------------------+
    | i    | RAND()           |
    +------+------------------+
    |    1 | 0.35877890638893 |
    |    2 | 0.28941420772058 |
    |    3 | 0.37073435016976 |
    +------+------------------+
    3 rows in set (0.00 sec)
    
    mysql> SELECT i, RAND(3) FROM t;
    +------+------------------+
    | i    | RAND(3)          |
    +------+------------------+
    |    1 | 0.90576975597606 |
    |    2 | 0.37307905813035 |
    |    3 | 0.14808605345719 |
    +------+------------------+
    3 rows in set (0.01 sec)

    定数イニシャライザを使用すると、シードは実行される前に、ステートメントのコンパイル時に一度初期化されます。引数として非定数イニシャライザ (カラム名など) が使用される場合は、RAND() が起動されるたびに、その値でシードが初期化されます。(引数値が等しい場合は、RAND() で毎回同じ値が返されることを示しています。)

    i <= R < j の範囲内でランダムな整数 R を取得するには、式 FLOOR(i + RAND() * (ji)) を使用します。たとえば、7 <= R < 12 の範囲内でランダムな整数を取得するには、次のようなステートメントを使用します。

    SELECT FLOOR(7 + (RAND() * 5));

    WHERE 句内の RAND() は、WHERE が実行されるたびに再評価されます。

    ORDER BY ではカラムが複数回評価されるため、ORDER BY 句内では RAND() 値を持つカラムを使用できません。ただし、次のようにランダムな順序で行を取得できます。

    mysql> SELECT * FROM tbl_name ORDER BY RAND();

    LIMIT と組み合わせて ORDER BY RAND() を使用すれば、行のセットからランダムなサンプルを選択する際に役立ちます。

    mysql> SELECT * FROM table1, table2 WHERE a=b AND c<d -> ORDER BY RAND() LIMIT 1000;

    RAND() は、完全なランダムジェネレータとしては設計されていません。要求に応じてランダムな数字をすばやく生成する方法であり、同じ MySQL バージョンのプラットフォーム間で移植可能です。

    この関数は、ステートメントベースのレプリケーションでは安全に使用できません。binlog_formatSTATEMENT に設定されているときに、この関数を使用すると、警告のログが記録されます。(Bug #49222)

  • ROUND(X), ROUND(X,D)

    引数 XD 小数点に丸めます。丸めアルゴリズムは、X のデータ型に依存します。D が指定されていない場合は、デフォルトで 0 に設定されます。D を負の数に指定すると、値 X の小数点左側の D 桁をゼロにすることができます。

    mysql> SELECT ROUND(-1.23);
            -> -1
    mysql> SELECT ROUND(-1.58);
            -> -2
    mysql> SELECT ROUND(1.58);
            -> 2
    mysql> SELECT ROUND(1.298, 1);
            -> 1.3
    mysql> SELECT ROUND(1.298, 0);
            -> 1
    mysql> SELECT ROUND(23.298, -1);
            -> 20

    戻り型は、(整数、重複、または 10 進数と仮定すると) 1 番目の引数と同じ型です。つまり、引数が整数の場合は、結果が整数 (小数点なし) になります。

    mysql> SELECT ROUND(150.000,2), ROUND(150,2);
    +------------------+--------------+
    | ROUND(150.000,2) | ROUND(150,2) |
    +------------------+--------------+
    |           150.00 |          150 |
    +------------------+--------------+

    ROUND() では、第 1 引数の型に応じて次のルールが使用されます。

    • 真値の数字の場合、ROUND() では四捨五入または切り捨て (切り上げ) ルールが使用されます。0.5 以上の小数部を持つ値は、正の場合は次の整数に切り上げられ、負の場合は次の整数に切り下げられます。(つまり、ゼロから遠い方に丸められます。)0.5 未満の小数部を持つ値は、正の場合は次の整数に切り下げられ、負の場合は次の整数に切り上げられます。

    • 近似値の数字の場合、結果は C ライブラリによって異なります。多くのシステムでは、これは、ROUND() で「偶数丸め」ルールが使用されることを意味します。任意の小数部を持つ値は、もっとも近い偶数の整数に丸められます。

    次の例では、正確な値の丸めと近似値の丸めの相違点を示します。

    mysql> SELECT ROUND(2.5), ROUND(25E-1);
    +------------+--------------+
    | ROUND(2.5) | ROUND(25E-1) |
    +------------+--------------+
    | 3          |            2 |
    +------------+--------------+

    詳細は、セクション12.20「高精度計算」を参照してください。

  • SIGN(X)

    X が負、ゼロ、または正のいずれであるのかに応じて、引数の符号を -10、または 1 として返します。

    mysql> SELECT SIGN(-32);
            -> -1
    mysql> SELECT SIGN(0);
            -> 0
    mysql> SELECT SIGN(234);
            -> 1
  • SIN(X)

    X のサインを返します。X はラジアンで指定されます。

    mysql> SELECT SIN(PI());
            -> 1.2246063538224e-16
    mysql> SELECT ROUND(SIN(PI()));
            -> 0
  • SQRT(X)

    負ではない数字 X の平方根を返します。

    mysql> SELECT SQRT(4);
            -> 2
    mysql> SELECT SQRT(20);
            -> 4.4721359549996
    mysql> SELECT SQRT(-16);
            -> NULL
  • TAN(X)

    X のタンジェントを返します。X はラジアンで指定されます。

    mysql> SELECT TAN(PI());
            -> -1.2246063538224e-16
    mysql> SELECT TAN(PI()+1);
            -> 1.5574077246549
  • TRUNCATE(X,D)

    D 小数点に切り捨てて、数字 X を返します。D0 の場合は、結果に小数点または小数部が含まれません。D を負の数に指定すると、値 X の小数点左側の D 桁をゼロにすることができます。

    mysql> SELECT TRUNCATE(1.223,1);
            -> 1.2
    mysql> SELECT TRUNCATE(1.999,1);
            -> 1.9
    mysql> SELECT TRUNCATE(1.999,0);
            -> 1
    mysql> SELECT TRUNCATE(-1.999,1);
            -> -1.9
    mysql> SELECT TRUNCATE(122,-2);
           -> 100
    mysql> SELECT TRUNCATE(10.28*100,0);
           -> 1028

    すべての数字は、ゼロ方向に丸められます。