このページは機械翻訳したものです。
表 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); -> 2mysql> SELECT ABS(-32); -> 32この関数は、
BIGINT値でも安全に使用できます。ACOS(X)Xのアークコサイン (つまり、コサインがXである値) を返します。Xが-1から1までの範囲内にない場合は、NULLを返します。mysql> SELECT ACOS(1); -> 0mysql> SELECT ACOS(1.0001); -> NULLmysql> SELECT ACOS(0); -> 1.5707963267949ASIN(X)Xのアークサイン (つまり、サインがXである値) を返します。Xが-1から1までの範囲内にない場合は、NULLを返します。mysql> SELECT ASIN(0.2); -> 0.20135792079033mysql> 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.1071487177941mysql> SELECT ATAN(-2); -> -1.1071487177941ATAN(,Y,X)ATAN2(Y,X)2 つの変数
XおよびYのアークタンジェントを返します。 これは、両方の引数の符号が結果の象限の判定に使用される点を除いて、のアークタンジェントの計算と同様です。Y/Xmysql> SELECT ATAN(-2,2); -> -0.78539816339745mysql> SELECT ATAN2(PI(),0); -> 1.5707963267949CEIL(X)CEIL()はCEILING()のシノニムです。CEILING(X)X以上で最小の整数値を返します。mysql> SELECT CEILING(1.23); -> 2mysql> 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()); -> -1COT(X)Xのコタンジェントを返します。mysql> SELECT COT(12); -> -1.5726734063977mysql> SELECT COT(0); -> out-of-range errorCRC32(expr)巡回冗長検査値を計算し、32 ビット値の符号なし値を返します。 引数が
NULLである場合は、結果もNULLになります。 引数は文字列であると想定され、(可能な場合は) 文字列でない場合でも文字列として処理されます。mysql> SELECT CRC32('MySQL'); -> 3259397556mysql> SELECT CRC32('mysql'); -> 2501908538DEGREES(X)ラジアンからディグリーに変換された引数
Xを返します。mysql> SELECT DEGREES(PI()); -> 180mysql> SELECT DEGREES(PI() / 2); -> 90EXP(X)e (自然対数の底) の
X乗の値を返します。 この関数の逆は、(単一の引数のみを使用する)LOG()またはLN()です。mysql> SELECT EXP(2); -> 7.3890560989307mysql> SELECT EXP(-2); -> 0.13533528323661mysql> SELECT EXP(0); -> 1FLOOR(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.69314718055995mysql> 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.69314718055995mysql> SELECT LOG(-2); -> NULLこの関数が 2 つのパラメータで呼び出される場合は、
Bを底とするXの対数が返されます。Xが 0 以下である場合、またはBが 1 以下である場合は、NULLが返されます。mysql> SELECT LOG(2,65536); -> 16mysql> SELECT LOG(10,100); -> 2mysql> SELECT LOG(1,100); -> NULLLOG(はB,X)LOG(と同等です。X) / LOG(B)LOG2(X)の底 2 の対数を返します。XXが 0.0 E0 以下の場合、この関数はNULLを返し、「「対数の引数が無効です」」という警告が報告されます。mysql> SELECT LOG2(65536); -> 16mysql> SELECT LOG2(-100); -> NULLLOG2()は、格納に必要なビット数を調べる際に役立ちます。 この関数は式LOG(と同等です。X) / LOG(2)LOG10(X)Xの底 10 の対数を返します。Xが 0.0 E0 以下の場合、この関数はNULLを返し、「「対数の引数が無効です」」という警告が報告されます。mysql> SELECT LOG10(2); -> 0.30102999566398mysql> SELECT LOG10(100); -> 2mysql> SELECT LOG10(-100); -> NULLLOG10(はX)LOG(10,と同等です。X)MOD(,N,M),N%MNMODMモジュロ演算。
Mで除算されたNの余りを返します。mysql> SELECT MOD(234, 10); -> 4mysql> SELECT 253 % 7; -> 1mysql> SELECT MOD(29,9); -> 2mysql> SELECT 29 MOD 9; -> 2この関数は、
BIGINT値でも安全に使用できます。MOD()は、小数部を持つ値でも機能し、除算後の正確な余りを返します。mysql> SELECT MOD(34.5,3); -> 1.5MOD(はN,0)NULLを返します。PI()π (pi) の値を返します。 表示されるデフォルトの小数点以下の桁数は 7 ですが、MySQL では内部的に全倍精度値が使用されます。
mysql> SELECT PI(); -> 3.141593mysql> SELECT PI()+0.000000000000000000; -> 3.141592653589793116POW(X,Y)XのY乗の値を返します。mysql> SELECT POW(2,2); -> 4mysql> SELECT POW(2,-2); -> 0.25POWER(X,Y)これは
POW()のシノニムです。RADIANS(X)ディグリーからラジアンに変換された引数
Xを返します。 (ラジアンは 180 度になります。)mysql> SELECT RADIANS(90); -> 1.5707963267949RAND([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: 0mysql> 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 * FROMtbl_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); -> -1mysql> SELECT ROUND(-1.58); -> -2mysql> SELECT ROUND(1.58); -> 2mysql> SELECT ROUND(1.298, 1); -> 1.3mysql> SELECT ROUND(1.298, 0); -> 1mysql> SELECT ROUND(23.298, -1); -> 20mysql> 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); -> -1mysql> SELECT SIGN(0); -> 0mysql> SELECT SIGN(234); -> 1SIN(X)Xのサインを返します。Xはラジアンで指定されます。mysql> SELECT SIN(PI()); -> 1.2246063538224e-16mysql> SELECT ROUND(SIN(PI())); -> 0SQRT(X)負ではない数字
Xの平方根を返します。mysql> SELECT SQRT(4); -> 2mysql> SELECT SQRT(20); -> 4.4721359549996mysql> SELECT SQRT(-16); -> NULLTAN(X)Xのタンジェントを返します。Xはラジアンで指定されます。mysql> SELECT TAN(PI()); -> -1.2246063538224e-16mysql> SELECT TAN(PI()+1); -> 1.5574077246549TRUNCATE(X,D)D小数点に切り捨てて、数字Xを返します。Dが0の場合は、結果に小数点または小数部が含まれません。Dを負の数に指定すると、値Xの小数点左側のD桁をゼロにすることができます。mysql> SELECT TRUNCATE(1.223,1); -> 1.2mysql> SELECT TRUNCATE(1.999,1); -> 1.9mysql> SELECT TRUNCATE(1.999,0); -> 1mysql> SELECT TRUNCATE(-1.999,1); -> -1.9mysql> SELECT TRUNCATE(122,-2); -> 100mysql> SELECT TRUNCATE(10.28*100,0); -> 1028すべての数字は、ゼロ方向に丸められます。
MySQL 8.0.21 以降では、
TRUNCATE()によって返されるデータ型は、ROUND()関数の戻り型を決定するものと同じルールに従います。詳細は、ROUND()の説明を参照してください。