通常の算術演算子を使用できます。 結果は次のルールに従って決定されます。
-
、+
、および*
の場合は、両方のオペランドが整数であれば、結果がBIGINT
(64 ビット) 精度で計算されます。両方のオペランドが整数で、いずれかが符合なしの場合は、結果が符合なし整数になります。 減算では、
NO_UNSIGNED_SUBTRACTION
SQL モードが有効になっている場合は、オペランドのいずれかが符号なしでも、結果が符号付きになります。+
、-
、/
、*
、%
のオペランドのいずれかが実数値または文字列値である場合は、結果の精度が、最大の精度を持つオペランドの精度になります。/
を使用して実行される除算では、2 つの正確な値のオペランドを使用したときの結果のスケールが、1 番目のオペランドにdiv_precision_increment
システム変数 (デフォルトでは 4) の値を加えた値になります。 たとえば、式5.05 / 0.014
の結果のスケールは、小数点以下 6 桁になります (360.714286
)。
ネストされた計算が各コンポーネントの精度を暗黙的に示すように、これらのルールは演算ごとに適用されます。 したがって、(14620 / 9432456) / (24250 / 9432456)
では、まず (0.0014) / (0.0026)
に解かれて、最終的な結果は小数点以下 8 桁 (0.60288653
) になります。
このようなルールおよびそれらが適用される方法があるため、計算のコンポーネントおよびサブコンポーネントで適切な精度レベルが使用されていることを慎重に確認してください。 セクション12.11「キャスト関数と演算子」を参照してください。
数値式評価でのオーバーフロー処理については、セクション11.1.7「範囲外およびオーバーフローの処理」を参照してください。
算術演算子は数字に適用されます。 その他の型の値では、代替の演算が使用できる場合もあります。 たとえば、日付値を追加するには、DATE_ADD()
を使用します。セクション12.7「日付および時間関数」を参照してください。
-
+
加算:
mysql> SELECT 3+5; -> 8
-
-
減算:
mysql> SELECT 3-5; -> -2
-
-
単項マイナス。 この演算子は、オペランドの符号を変更します。
mysql> SELECT - 2; -> -2
注記この演算子が
BIGINT
で使用される場合は、戻り値もBIGINT
になります。 つまり、値 −263 を持つ可能性のある整数では、-
の使用を避けるべきです。 -
*
乗算:
mysql> SELECT 3*5; -> 15 mysql> SELECT 18014398509481984*18014398509481984.0; -> 324518553658426726783156020576256.0 mysql> SELECT 18014398509481984*18014398509481984; -> out-of-range error
最後の式では、整数乗算の結果が 64 ビット範囲の
BIGINT
計算を超過するため、エラーが生成されます。 (セクション11.1「数値データ型」を参照してください。) -
/
除算:
mysql> SELECT 3/5; -> 0.60
ゼロによる除算では、
NULL
の結果が生成されます。mysql> SELECT 102/(1-1); -> NULL
結果が整数に変換されるコンテキストで実行される場合にのみ、除算は
BIGINT
算術を使用して計算されます。 -
DIV
整数除算。 除算結果から小数点以下の小数部を破棄します。
いずれかのオペランドが整数以外の型の場合、オペランドは
DECIMAL
に変換され、DECIMAL
算術を使用して除算されてから、結果がBIGINT
に変換されます。 結果がBIGINT
の範囲を超過する場合は、エラーが発生します。mysql> SELECT 5 DIV 2, -5 DIV 2, 5 DIV -2, -5 DIV -2; -> 2, -2, -2, 2
-
,N
%M
N
MODM
モジュロ演算。
M
で除算されたN
の余りを返します。 詳細は、セクション12.6.2「数学関数」のMOD()
関数に関する説明を参照してください。