MySQL 8.0 リファレンスマニュアル


12.6.1 算術演算子

表 12.9 「算術演算子」

名前 説明
%, MOD モジュロ演算子
* 乗算演算子
+ 加算演算子
- 減算演算子
- 引数の符号を変更します
/ 除算演算子
DIV 整数除算

通常の算術演算子を使用できます。 結果は次のルールに従って決定されます。

  • -+、および * の場合は、両方のオペランドが整数であれば、結果が 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 MOD M

    モジュロ演算。 M で除算された N の余りを返します。 詳細は、セクション12.6.2「数学関数」MOD() 関数に関する説明を参照してください。


関連キーワード:  関数, 算術, 空間, リファレンス, 除算, オペランド, 整数, 精度, 計算, BIGINT