DataBase/Oracle

[ORACLE]나머지 값을 구하는 REMAINDER, MOD 함수

DevStory 2021. 6. 5.

REMAINDER Function

REMAINDER (number2, number1)

number2를 number1로 나누었을 때 나머지 값을 반환합니다.

 

MOD Function

MOD ( number2, number1 )

number2를 number1로 나누었을 때 나머지 값을 반환합니다.


REMAINDER 함수의 특징

  1. number2와 number1은 모든 숫자 데이터 타입이 가능합니다.
  2. 반환 값은 숫자 데이터 타입입니다.
  3. number2가 무한대이며, 데이터 타입이 NUMBER이면 오류를 반환하고 데이터 타입이 BINARY_FLOAT 또는 BINARY_DOUBLE이면 NaN을 반환합니다.
  4. number1 != 0 이면 나머지 값의 계산식은 number2 - (number1 * ROUND(number2 / number1))입니다.
  5. number2가 부동 소수점이고 나머지 값이 0이면, 나머지 부호는 number2의 부호입니다.

MOD 함수의 특징

  • 분자 및 분모의 데이터 타입은 숫자 데이터 타입이거나 숫자 데이터 타입으로 변환 가능한 모든 타입이 될 수 있습니다.
  • MOD 함수는 "0으로 나누기"오류를 방지하기 위해 분모가 0 인 경우 분자 값을 반환합니다.
  • MOD 계산식은  number2 – number1 * FLOOR (number2 / number1) 입니다.

차이점

  • REMAINDER 함수는 나머지 계산 시 ROUND 함수를 사용합니다.
  • MOD 함수는 나머지 계산 시 FLOOR 함수를 사용합니다.
  • ROUND 함수는 올림 되거나 내림될 수 있지만, FLOOR 함수는 항상 내림 처리됩니다.
  • 음수를 계산할 때, 다른 결괏값이 나올 수 있습니다.

REMAINDER 함수의 예제

EX 1) 25 / 4의 나머지

SELECT REMAINDER(25, 4) AS REMAINDER_RESULT
FROM DUAL;


EX 2) 25 / 5의 나머지

SELECT REMAINDER(25, 5) AS REMAINDER_RESULT
FROM DUAL;


EX 3) 25 / 7의 나머지

SELECT REMAINDER(25, 7) AS REMAINDER_RESULT
FROM DUAL;

REMAINDER 함수의 계산식 number2 - (number1 * ROUND(number2 / number1)에 값을 대입하면 왜 -3이 나오는지 확인 가능합니다.

25 - (7 * ROUND(25 / 7)) = 25 - (7 * 4) = 25 - 28 = -3


EX 4) 29 / -10의 나머지

SELECT REMAINDER(29, -10) AS REMAINDER_RESULT
FROM DUAL;

29 - (-10 * ROUND(29/-10)) = 29 - (-10 * -3) = 29 - 30 = -1


EX 5) -29 / -10의 나머지

SELECT REMAINDER(-29, -10) AS REMAINDER_RESULT
FROM DUAL;

-29 - (-10 * ROUND(-29/-10)) = -29 - (-10 * 3) = -29 + 30 = 1


MOD 함수의 예제

EX 1) 25 / 7의 나머지

SELECT MOD(25, 7) AS MOD_RESULT
FROM DUAL;

REMAINDER 함수의 결과는 1인데, MOD 함수는 4로 정상적으로 처리되었습니다.


EX 2) 25 / 0의 나머지

SELECT MOD(25, 0) AS MOD_RESULT
FROM DUAL;

MOD 함수에서 0으로 나눌 경우 반환 값은 첫 번째 매개변수의 값입니다.


EX 3) 30 / '4'의 나머지

SELECT MOD(30,'4') AS MOD_RESULT
FROM DUAL;

'4'가 숫자 타입으로 변환되어서 계산이 됩니다.

 

반응형

댓글