表 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
を返します。
-
X
の絶対値を返します。mysql> SELECT ABS(2); -> 2 mysql> SELECT ABS(-32); -> 32
この関数は、
BIGINT
値でも安全に使用できます。 -
X
のアークコサイン (つまり、コサインがX
である値) を返します。X
が-1
から1
までの範囲内にない場合は、NULL
を返します。mysql> SELECT ACOS(1); -> 0 mysql> SELECT ACOS(1.0001); -> NULL mysql> SELECT ACOS(0); -> 1.5707963267949
-
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' | +---------+------+-----------------------------------------+
-
X
のアークタンジェント (つまり、タンジェントがX
である値) を返します。mysql> SELECT ATAN(2); -> 1.1071487177941 mysql> SELECT ATAN(-2); -> -1.1071487177941
-
2 つの変数
X
およびY
のアークタンジェントを返します。これは、両方の引数の符号が結果の象限の判定に使用される点を除いて、
のアークタンジェントの計算と同様です。Y
/X
mysql> SELECT ATAN(-2,2); -> -0.78539816339745 mysql> SELECT ATAN2(PI(),0); -> 1.5707963267949
-
CEIL()
はCEILING()
のシノニムです。 -
X
以上で最小の整数値を返します。mysql> SELECT CEILING(1.23); -> 2 mysql> SELECT CEILING(-1.23); -> -1
引数が厳密値数値の場合は、戻り値の型も厳密値数値になります。引数が文字列または浮動小数点の場合は、戻り値の型が浮動小数点になります。
-
数値を異なる基数間で変換します。基数
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'
-
X
のコサインを返します。X
はラジアンで指定されます。mysql> SELECT COS(PI()); -> -1
-
X
のコタンジェントを返します。mysql> SELECT COT(12); -> -1.5726734063977 mysql> SELECT COT(0); -> NULL
-
巡回冗長検査値を計算し、32 ビット値の符号なし値を返します。引数が
NULL
である場合は、結果もNULL
になります。引数は文字列であると想定され、(可能な場合は) 文字列でない場合でも文字列として処理されます。mysql> SELECT CRC32('MySQL'); -> 3259397556 mysql> SELECT CRC32('mysql'); -> 2501908538
-
ラジアンからディグリーに変換された引数
X
を返します。mysql> SELECT DEGREES(PI()); -> 180 mysql> SELECT DEGREES(PI() / 2); -> 90
-
e (自然対数の底) の
X
乗の値を返します。この関数の逆は、(単一の引数のみを使用する)LOG()
またはLN()
です。mysql> SELECT EXP(2); -> 7.3890560989307 mysql> SELECT EXP(-2); -> 0.13533528323661 mysql> SELECT EXP(0); -> 1
-
X
以下で最大の整数値を返します。mysql> SELECT FLOOR(1.23); -> 1 mysql> SELECT FLOOR(-1.23); -> -2
引数が厳密値数値の場合は、戻り値の型も厳密値数値になります。引数が文字列または浮動小数点の場合は、戻り値の型が浮動小数点になります。
-
FORMAT(
X
,D
)数値
X
を'#,###,###.##'
のような書式に変換し、小数点第D
位に丸めて、その結果を文字列として返します。詳細は、セクション12.5「文字列関数」を参照してください。 -
この関数を使用すると、10 進数または文字列の 16 進表現を取得できます。その方法は、引数の型によって異なります。詳細は、セクション12.5「文字列関数」で、この関数の説明を参照してください。
-
X
の自然対数 (つまり、X
の底 e の対数) を返します。X
が 0 以下である場合は、NULL
が返されます。mysql> SELECT LN(2); -> 0.69314718055995 mysql> SELECT LN(-2); -> NULL
この関数は
LOG(
のシノニムです。この関数の逆は、X
)EXP()
関数です。 -
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
) -
の底 2 の対数を返します。X
mysql> SELECT LOG2(65536); -> 16 mysql> SELECT LOG2(-100); -> NULL
LOG2()
は、格納に必要なビット数を調べる際に役立ちます。この関数は式LOG(
と同等です。X
) / LOG(2) -
X
の底 10 の対数を返します。mysql> SELECT LOG10(2); -> 0.30102999566398 mysql> SELECT LOG10(100); -> 2 mysql> SELECT LOG10(-100); -> NULL
LOG10(
はX
)LOG(10,
と同等です。X
) -
モジュロ演算。
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) の値を返します。表示されるデフォルトの小数点以下の桁数は 7 ですが、MySQL では内部的に全倍精度値が使用されます。
mysql> SELECT PI(); -> 3.141593 mysql> SELECT PI()+0.000000000000000000; -> 3.141592653589793116
-
X
のY
乗の値を返します。mysql> SELECT POW(2,2); -> 4 mysql> SELECT POW(2,-2); -> 0.25
-
これは
POW()
のシノニムです。 -
ディグリーからラジアンに変換された引数
X
を返します。注記π ラジアンは、180 ディグリーと同等です。
mysql> SELECT RADIANS(90); -> 1.5707963267949
-
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() * (j
を使用します。たとえば、i
))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_format
がSTATEMENT
に設定されているときに、この関数を使用すると、警告のログが記録されます。(Bug #49222) -
引数
X
をD
小数点に丸めます。丸めアルゴリズムは、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「高精度計算」を参照してください。
-
X
が負、ゼロ、または正のいずれであるのかに応じて、引数の符号を-1
、0
、または1
として返します。mysql> SELECT SIGN(-32); -> -1 mysql> SELECT SIGN(0); -> 0 mysql> SELECT SIGN(234); -> 1
-
X
のサインを返します。X
はラジアンで指定されます。mysql> SELECT SIN(PI()); -> 1.2246063538224e-16 mysql> SELECT ROUND(SIN(PI())); -> 0
-
負ではない数字
X
の平方根を返します。mysql> SELECT SQRT(4); -> 2 mysql> SELECT SQRT(20); -> 4.4721359549996 mysql> SELECT SQRT(-16); -> NULL
-
X
のタンジェントを返します。X
はラジアンで指定されます。mysql> SELECT TAN(PI()); -> -1.2246063538224e-16 mysql> SELECT TAN(PI()+1); -> 1.5574077246549
-
D
小数点に切り捨てて、数字X
を返します。D
が0
の場合は、結果に小数点または小数部が含まれません。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
すべての数字は、ゼロ方向に丸められます。