본문 바로가기
데이터베이스/MSSQL

MSSQL 분모가 0 일때 처리 방법

by Dokon Jang 2022. 7. 7.
반응형

MSSQL 데이터베이스의 데이터로 계산하는 쿼리에서 분모가 0일 때 아래와 같은 오류가 발생합니다.

 

WITH TEST AS
(
	SELECT 10 A, 0 B
)
SELECT A / B
  FROM TEST
0으로 나누기 오류가 발생했습니다.

 

아래의 쿼리 같이 IIF 또는 CASE를 사용하여 0 인 경우를 처리하기도 합니다.

WITH TEST AS
(
	SELECT 10 A, 0 B
)
SELECT IIF(B = 0, 0, A / B),
       CASE WHEN B = 0 THEN NULL ELSE A / B END
  FROM TEST

 

다른 방법으로 ANSI_WARNINGS, ARITHIGNORE, ARITHABORT을 설정하는 방법입니다.

ANSI_WARNINGS ON으로 설정한 경우 SUM, AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP, COUNT 등의 집계 함수에 NULL 값이 있으면 경고 메시지가 생성됩니다. OFF로 설정한 경우에는 경고가 발생하지 않습니다.
ARITHIGNORE 쿼리 실행 중 오버플로 또는 0으로 나누기 오류에서 오류 메시지를 반환할지 여부를 제어합니다.
ARITHABORT 쿼리 실행 중 오버플로 또는 0으로 나누기 오류가 발생하면 쿼리를 종료합니다.
SET ANSI_WARNINGS OFF;
SET ARITHIGNORE ON;
SET ARITHABORT OFF;

WITH TEST AS
(
	SELECT 10 A, 0 B
)
SELECT A / B
  FROM TEST

 

참고)

MyBatis 또는 String을 연결해서 쿼리를 실행 시 SET문 뒤에 반드시 ";"를 붙여주고, SELECT, UPDATE, INSERT문을  작성해야 합니다.

 

댓글0