12.6.1 산술 연산자
표 12.11 산술 연산자
| 이름 | 설명 |
|---|---|
DIV | 정수 나누기 |
/ | 나누기 연산자 |
- | 빼기 연산자 |
% , MOD | 모듈로 연산자 |
+ | 덧셈 연산자 |
* | 곱셈 연산자 |
- | 인수의 부호를 변경합니다 |
일반적으로 산술 연산자를 사용할 수 있습니다. 결과는 다음 규칙에 따라 결정됩니다.
-,+, 그리고*의 경우는 두 피연산자가 정수이면 결과가BIGINT(64 비트) 정밀도로 계산됩니다.두 피연산자가 모두 정수 중 하나가 부호가없는 경우는 결과가 부호가없는 정수입니다. 빼기는
NO_UNSIGNED_SUBTRACTIONSQL 모드가 활성화되어있는 경우 피연산자 중 하나가 부호 없음에도 결과가 부호 첨부합니다.+,-,/,*,%피연산자 중 하나가 실수 또는 문자열 값이면 결과의 정밀도가 최대 정밀도를 갖는 피연산자의 정밀도입니다./를 사용하여 수행되는 나누기는 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%MNMODM모듈로 연산.
M으로 나눈N의 나머지를 반환합니다. 자세한 내용은 섹션 12.6.2 "수학 함수" 의MOD()함수에 대한 설명을 참조하십시오.