MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
表 12.10 「数学関数」
名前 | 説明 |
---|---|
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
の絶対値、または X
が NULL
の場合は NULL
を返します。
結果の型は引数の型から導出されます。 これは、結果を署名付き BIGINT
値に格納できないため、ABS(-9223372036854775808)
でエラーが発生することを意味します。
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
です。 from_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'+X'0a',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);
-> out-of-range error
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), FLOOR(-1.23);
-> 1, -2
引数が厳密値数値の場合は、戻り値の型も厳密値数値になります。 引数が文字列または浮動小数点の場合は、戻り値の型が浮動小数点になります。
FORMAT(
X
,D
)
数値 X
を '#,###,###.##'
のような書式に変換し、小数点第 D
位に丸めて、その結果を文字列として返します。 詳細は、セクション12.8「文字列関数および演算子」を参照してください。
この関数を使用すると、10 進数または文字列の 16 進表現を取得できます。その方法は、引数の型によって異なります。 詳細は、セクション12.8「文字列関数および演算子」で、この関数の説明を参照してください。
LN(
X
)
X
の自然対数 (つまり、X
の底 e の対数) を返します。 X
が 0.0 E0 以下の場合、この関数は NULL
を返し、「「対数の引数が無効です」」という警告が報告されます。
mysql>SELECT LN(2);
-> 0.69314718055995 mysql>SELECT LN(-2);
-> NULL
この関数は LOG(
のシノニムです。 この関数の逆は、X
)EXP()
関数です。
LOG(
, X
)LOG(
B
,X
)
1 つのパラメータで呼び出される場合、この関数は X
の自然対数を返します。 X
が 0.0 E0 以下の場合、この関数は 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
)
の底 2 の対数を返します。 X
X
が 0.0 E0 以下の場合、この関数は NULL
を返し、「「対数の引数が無効です」」という警告が報告されます。
mysql>SELECT LOG2(65536);
-> 16 mysql>SELECT LOG2(-100);
-> NULL
LOG2()
は、格納に必要なビット数を調べる際に役立ちます。 この関数は式 LOG(
と同等です。
X
) / LOG(2)
LOG10(
X
)
X
の底 10 の対数を返します。 X
が 0.0 E0 以下の場合、この関数は NULL
を返し、「「対数の引数が無効です」」という警告が報告されます。
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
% M
N
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
)
X
の Y
乗の値を返します。
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([
N
])
0
<= v
< 1.0
の範囲内で、ランダムな浮動小数点値 v
を返します。 i
<= R
< j
の範囲内でランダムな整数 R
を取得するには、式 FLOOR(
− i
+ RAND() * (j
を使用します。 たとえば、i
))7
<=R
< 12
の範囲のランダム整数を取得するには、次のステートメントを使用します:
SELECT FLOOR(7 + (RAND() * 5));
整数引数 N
が指定されている場合は、シード値として使用されます:
定数イニシャライザ引数を使用すると、ステートメントの準備時に、実行前にシードが一度初期化されます。
定数以外のイニシャライザ引数 (カラム名など) を使用すると、シードは RAND()
の起動ごとに値で初期化されます。
この動作の影響の 1 つは、等しい引数値の場合、RAND(
は毎回同じ値を返すため、カラム値の繰返し可能なシーケンスを生成することです。 次の例では、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)
WHERE
句内の RAND()
は、行ごと (テーブルから選択する場合) または行の組合せごと (複数テーブル結合から選択する場合) に評価されます。 したがって、オプティマイザのために、RAND()
は定数値ではなく、インデックスの最適化に使用できません。 詳細は、セクション8.2.1.20「関数コールの最適化」を参照してください。
ORDER BY
句または GROUP BY
句で RAND()
値を含むカラムを使用すると、いずれかの句で RAND()
式が同じ行に対して複数回評価され、毎回異なる結果が返されるため、予期しない結果になる可能性があります。 行をランダムな順序で取得することを目的としている場合は、次のようなステートメントを使用できます:
SELECT * FROM tbl_name
ORDER BY RAND();
一連の行からランダムサンプルを選択するには、ORDER BY RAND()
と LIMIT
を組み合せます:
SELECT * FROM table1, table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000;
RAND()
は、完全なランダムジェネレータとしては設計されていません。 要求に応じてランダムな数字をすばやく生成する方法であり、同じ MySQL バージョンのプラットフォーム間で移植可能です。
この関数は、ステートメントベースのレプリケーションでは安全に使用できません。 binlog_format
が STATEMENT
に設定されているときに、この関数を使用すると、警告のログが記録されます。
ROUND(
, X
)ROUND(
X
,D
)
引数 X
を D
小数点に丸めます。 丸めアルゴリズムは、X
のデータ型に依存します。 D
が指定されていない場合は、デフォルトで 0 に設定されます。 D
を負の数に指定すると、値 X
の小数点左側の D
桁をゼロにすることができます。 D
の最大絶対値は 30 です。30 (または -30) を超える桁は切り捨てられます。
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 mysql>SELECT ROUND(.12345678901234567890123456789012345, 35);
-> 0.123456789012345678901234567890
戻り値の型は、最初の引数と同じです (integer、double または decimal であると想定)。 つまり、引数が整数の場合は、結果が整数 (小数点なし) になります。
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()
が「「最も近い偶数に丸める」」ルールを使用することを意味: 2 つの整数の間に小数部がある値は、最も近い偶数の整数に丸められます。
次の例では、正確な値の丸めと近似値の丸めの相違点を示します。
mysql> SELECT ROUND(2.5), ROUND(25E-1);
+------------+--------------+
| ROUND(2.5) | ROUND(25E-1) |
+------------+--------------+
| 3 | 2 |
+------------+--------------+
詳細は、セクション12.25「高精度計算」を参照してください。
MySQL 8.0.21 以降では、ROUND()
(および TRUNCATE()
) によって返されるデータ型は、次に示すルールに従って決定されます:
最初の引数が任意の整数型の場合、戻り型は常に BIGINT
です。
最初の引数が浮動小数点型または非数値型の場合、戻り型は常に DOUBLE
です。
最初の引数が DECIMAL
値の場合、戻り型も DECIMAL
です。
戻り値の型属性も最初の引数からコピーされますが、DECIMAL
の場合は、2 番目の引数が定数値の場合を除きます。
小数点以下の桁数が引数の位取りより小さい場合は、結果の位取りと精度が適宜調整されます。
また、ROUND()
(TRUNCATE()
関数ではありません) の場合、精度は、有効桁数を増やす端数処理に対応するために 1 箇所まで拡張されます。 2 番目の引数が負の場合、戻り値の型は、対応する精度でスケールが 0 になるように調整されます。 たとえば、ROUND(99.999, 2)
は 100.00
を返します。最初の引数は DECIMAL(5, 3)
で、戻り値の型は DECIMAL(5, 2)
です。
2 番目の引数が負の場合、戻り値の型はスケール 0 および対応する精度を持ち、ROUND(99.999, -1)
は 100
(DECIMAL(3, 0)
) を返します。
SIGN(
X
)
X
が負、ゼロ、または正のいずれであるのかに応じて、引数の符号を -1
、0
、または 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
を返します。 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
すべての数字は、ゼロ方向に丸められます。
MySQL 8.0.21 以降では、TRUNCATE()
によって返されるデータ型は、ROUND()
関数の戻り型を決定するものと同じルールに従います。詳細は、ROUND()
の説明を参照してください。