반응형
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문을 작성해야 합니다.
반응형
'데이터베이스 > MSSQL' 카테고리의 다른 글
MSSQL 문자 숫자 변환 및 숫자 체크 (0) | 2022.08.18 |
---|---|
MSSQL에서 오라클 DECODE 처럼 쿼리 사용하기 (0) | 2022.07.14 |
MSSQL 개월 차이에 대해서 (3) | 2022.05.24 |
MSSQL CASE WHEN 조건절에서 NULL 처리 (0) | 2021.10.21 |
MSSQL 행 번호 매기기 (0) | 2021.08.04 |
댓글