SQL

MOD함수와 %

temporubato108 2024. 11. 15. 17:51

SQL에서는 나머지 연산을 수행할 때 MOD 함수와 % 연산자를 사용할 수 있습니다. 하지만 이 두 방식은 사용되는 DBMS와 문법에서 차이가 있기 때문에 적절히 사용해야 합니다. 오늘은 MOD 함수와 % 연산자의 차이점과 사용법을 간단히 정리해보겠습니다.


1. MOD 함수란?

MODModulus(나머지)를 의미하며, 표준 SQL에서 제공하는 함수입니다. 이 함수는 피제수(나누어지는 수)와 제수(나누는 수)를 받아 나머지를 반환합니다.

사용법:

MOD(피제수, 제수)

예시 (Oracle, PostgreSQL 등에서 사용 가능):

SELECT MOD(10, 3) AS 나머지 FROM DUAL;
  • 결과: 1 (10 ÷ 3의 나머지)

2. % 연산자란?

%SQL Server에서만 사용 가능한 연산자로, 피제수와 제수의 나머지 연산을 간단한 수식 형태로 표현할 수 있습니다.

사용법:

피제수 % 제수

예시 (SQL Server 전용):

SELECT 10 % 3 AS 나머지;
  • 결과: 1 (10 ÷ 3의 나머지)

3. MOD와 %의 차이점

특징 MOD 함수 % 연산자
지원 DBMS Oracle, PostgreSQL 등 SQL Server
표현 방식 MOD(피제수, 제수) 피제수 % 제수
가독성 함수 호출 방식 수식처럼 간단
예외 처리 제수가 0일 경우 오류 발생 제수가 0일 경우 오류 발생

4. 동일한 결과를 얻는 예시 비교

Oracle (MOD 함수 사용):

SELECT MOD(15, 4) AS 나머지 FROM DUAL;
  • 결과: 3 (15 ÷ 4의 나머지)

SQL Server (% 연산자 사용):

SELECT 15 % 4 AS 나머지;
  • 결과: 3 (15 ÷ 4의 나머지)

5. 두 방식의 비교

  • MOD 함수: 표준 SQL이기 때문에 다양한 DBMS에서 호환됩니다. Oracle, PostgreSQL 등 대부분의 데이터베이스에서 사용 가능하므로 이식성이 높습니다.
  • % 연산자: 간단한 수식 형태로 작성 가능하며, SQL Server에서만 사용됩니다. SQL Server에서 작업할 때 가독성과 간결성이 뛰어납니다.

6. 주의점

  1. DBMS 호환성:
    • Oracle, PostgreSQL 등에서는 MOD를 사용해야 하고, SQL Server에서는 %를 사용해야 합니다.
  2. 제수가 0일 경우:
    • 두 방식 모두 제수가 0이면 오류가 발생하니, 이를 방지하려면 조건문을 추가하거나 예외 처리를 해야 합니다.

제수 0 예외 처리 예시 (Oracle):

SELECT CASE 
         WHEN 제수 = 0 THEN NULL 
         ELSE MOD(피제수, 제수) 
       END AS 나머지
FROM 테이블명;