12.6.1 산술 연산자
표 12.11 산술 연산자
이름 | 설명 |
---|---|
DIV | 정수 나누기 |
/ | 나누기 연산자 |
- | 빼기 연산자 |
% , MOD | 모듈로 연산자 |
+ | 덧셈 연산자 |
* | 곱셈 연산자 |
- | 인수의 부호를 변경합니다 |
일반적으로 산술 연산자를 사용할 수 있습니다. 결과는 다음 규칙에 따라 결정됩니다.
-
,+
, 그리고*
의 경우는 두 피연산자가 정수이면 결과가BIGINT
(64 비트) 정밀도로 계산됩니다.두 피연산자가 모두 정수 중 하나가 부호가없는 경우는 결과가 부호가없는 정수입니다. 빼기는
NO_UNSIGNED_SUBTRACTION
SQL 모드가 활성화되어있는 경우 피연산자 중 하나가 부호 없음에도 결과가 부호 첨부합니다.+
,-
,/
,*
,%
피연산자 중 하나가 실수 또는 문자열 값이면 결과의 정밀도가 최대 정밀도를 갖는 피연산자의 정밀도입니다./
를 사용하여 수행되는 나누기는 2 개의 정확한 값 피연산자를 사용했을 때의 결과의 스케일이 첫 번째 피연산자div_precision_increment
시스템 변수 (기본적으로 4)의 값을 더한 값이됩니다 . 예를 들어, 식5.05 / 0.014
의 결과의 스케일은 소수점 이하 6 자리입니다 (360.714286
).
중첩 된 계산이 각 구성 요소의 정확도를 암시 적으로 나타내는 바와 같이, 이러한 규칙은 연산별로 적용됩니다. 따라서 (14620 / 9432456) / (24250 / 9432456)
는 먼저 (0.0014) / (0.0026)
에 풀려 최종 결과는 소수점 8 자리 ( 0.60288653
)입니다.
이러한 규칙 및 그들이 적용되는 방법이 있기 때문에 계산의 구성 요소 및 하위 구성 요소에 적절한 정밀도 수준이 사용되고 있는지를 신중하게 확인하십시오. 섹션 12.10 「캐스트 함수 및 연산자 " 를 참조하십시오.
숫자 식 평가에서 오버 플로우 내용은 섹션 11.2.6 "범위 및 오버플로 처리" 를 참조하십시오.
산술 연산자는 숫자에 적용됩니다. 다른 형태의 값으로 대체 연산을 사용할 수도 있습니다. 예를 들어, 날짜 값을 추가하려면 DATE_ADD()
를 사용합니다. 섹션 12.7 "날짜 및 시간 함수" 를 참조하십시오.
+
추가 :
mysql>
SELECT 3+5;
-> 8-
뺄셈 :
mysql>
SELECT 3-5;
-> -2-
단항 마이너스. 이 연산자는 피연산자의 부호를 변경합니다.
mysql>
SELECT - 2;
-> -2참고이 연산자가
BIGINT
로 사용되는 경우, 반환 값도BIGINT
됩니다. 즉 -2 63을 가질 가능성이있는 정수는-
의 사용을 피해야한다.*
곱셈 :
mysql>
SELECT 3*5;
-> 15 mysql>SELECT 18014398509481984*18014398509481984.0;
-> 324518553658426726783156020576256.0 mysql>SELECT 18014398509481984*18014398509481984;
-> out-of-range error마지막 식에서는 정수 곱셈의 결과가 64 비트 범위의
BIGINT
계산을 초과하기 때문에 오류가 생성됩니다. ( 섹션 11.2 "숫자" 를 참조하십시오.)/
나누기 :
mysql>
SELECT 3/5;
-> 0.600으로 나누기는
NULL
결과가 생성됩니다.mysql>
SELECT 102/(1-1);
-> NULL결과가 정수로 변환되는 컨텍스트에서 실행되는 경우에만 나누기는
BIGINT
산술을 사용하여 계산됩니다.DIV
정수 나누기.
FLOOR()
과 유사하지만,BIGINT
값도 안전합니다.MySQL 5.6에서는 피연산자 중 하나가 정수 이외의 형태 인 경우는 결과가
BIGINT
로 변환되기 전에 피연산자가DECIMAL
로 변환되고,DECIMAL
산술을 사용하여 나눕니다. 결과가BIGINT
의 범위를 초과하는 경우 오류가 발생합니다.mysql>
SELECT 5 DIV 2;
-> 2
,N
%M
N
MODM
모듈로 연산.
M
으로 나눈N
의 나머지를 반환합니다. 자세한 내용은 섹션 12.6.2 "수학 함수" 의MOD()
함수에 대한 설명을 참조하십시오.