반응형

 

SQL에서 CASE WHEN 구문은 상당히 많이 쓰인다.

IF / SWITCH 문을 대신하거나, SUM / COUNT 등 집계 함수 등 대표적으로 사용된다.

 

CASE WHEN을 사용할 때, 아래와 같은 오류를 본 경우가 있을 것이다.

 

varchar 값 'XXXXXX'을(를) 데이터 형식 int(으)로 변환하지 못했습니다.

왜 이런 현상이 발생하는 것일까?

 

1
2
3
4
5
6
7
DECLARE @id VARCHAR(50);
 
SET @id='kikiki';
 
SELECT
    CASE WHEN ISNULL(@id, ''= '' THEN 1
            ELSE 'testString' END
cs

 

그 이유는 간단하다.

THEN에 있는 1과 'testString'의 데이터 형식이 상이하기 때문이다.

데이터 형식이 상이하기 때문에 이 오류의 해결 방법은 데이터 형식을 동일하게 맞춰주면 된다.

 

1
2
3
4
5
6
7
DECLARE @id VARCHAR(50);
 
SET @id='kikiki';
 
SELECT
    CASE WHEN ISNULL(@id, ''= '' THEN '1'
            ELSE 'testString' END
cs

 

데이터 형식을 맞춰주니, 오류는 사라졌다.

그렇다면 아래와 같은 코드는 동일한 에러가 발생할까?

 

1
2
3
4
5
6
7
DECLARE @id VARCHAR(50);
 
SET @id='kikiki';
 
SELECT
    CASE WHEN ISNULL(@id, ''= '' THEN 1
            ELSE '1234567' END
cs

 

THEN에는 숫자, ELSE에는 문자열이지만 숫자만 포함된 문자열!

오류는 발생하지 않는다. 숫자만 포함된 문자열은 숫자로 판단하는 것으로 확인된다.

CASE WHEN 절을 많이 사용하기 때문에, 데이터 타입을 꼭 맞춰야 겠다는 생각을 다시 한다.

 

반응형

+ Recent posts