Arithmetic Operators
The usual arithmetic operators are available. The result is determined according to the following rules:
- In the case of
-,+, and*, the result is calculated withBIGINT(64-bit) precision if both operands are integers. - If both operands are integers and any of them are unsigned, the result is an unsigned integer. For subtraction, if the
NO_UNSIGNED_SUBTRACTIONSQL mode is enabled, the result is signed even if any operand is unsigned. - If any of the operands of a
+,-,/,*,%is a real or string value, the precision of the result is the precision of the operand with the maximum precision. - In division performed with
/, the scale of the result when using two exact-value operands is the scale of the first operand plus the value of thediv_precision_incrementsystem variable (which is 4 by default). For example, the result of the expression/ 0.014has a scale of six decimal places (360.714286).
These rules are applied for each operation, such that nested calculations imply the precision of each component. Hence, (14620 / 9432456) / (24250 / 9432456), resolves first to (0.0014) / (0.0026), with the final result having 8 decimal places (0.60288653).
Because of these rules and the way they are applied, care should be taken to ensure that components and subcomponents of a calculation use the appropriate level of precision. See , "Cast Functions and Operators".
For information about handling of overflow in numeric expression evaluation, see , "Out-of-Range and Overflow Handling".
Arithmetic operators apply to numbers. For other types of values, alternative operations may be available. For example, to add date values, use DATE_ADD(); see , "Date and Time Functions".
+Addition:
mysql>
SELECT 3+5;-> 8-Subtraction:
mysql>
SELECT 3-5;-> -2-Unary minus. This operator changes the sign of the operand.
mysql>
NoteSELECT - 2;-> -2If this operator is used with a
BIGINT, the return value is also aBIGINT. This means that you should avoid using-on integers that may have the value of -263.*Multiplication:
mysql>
SELECT 3*5;-> 15 mysql>SELECT 18014398509481984*18014398509481984.0;-> 324518553658426726783156020576256.0 mysql>SELECT 18014398509481984*18014398509481984;-> 0The result of the last expression is incorrect because the result of the integer multiplication exceeds the 64-bit range of
BIGINTcalculations. (See , "Numeric Types".)/Division:
mysql>
SELECT 3/5;-> 0.60Division by zero produces a
NULLresult:mysql>
SELECT 102/(1-1);-> NULLA division is calculated with
BIGINTarithmetic only if performed in a context where its result is converted to an integer.DIVInteger division. Similar to
FLOOR(), but is safe withBIGINTvalues.In MariaDB 5.6, if either operand has a noninteger type, the operands are converted to
DECIMALand divided usingDECIMALarithmetic before converting the result toBIGINT. If the result exceedsBIGINTrange, an error occurs.mysql>
SELECT 5 DIV 2;-> 2,N%MNMODMModulo operation. Returns the remainder of
Ndivided byM. For more information, see the description for theMOD()function in , "Mathematical Functions".