반응형
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 절을 많이 사용하기 때문에, 데이터 타입을 꼭 맞춰야 겠다는 생각을 다시 한다.
반응형
'개발 > MSSQL' 카테고리의 다른 글
[SQL] 랭크함수와 PARTITION BY를 이용하여 1등만 뽑아보자. (4) | 2020.01.29 |
---|---|
[SQL] 함수(Function)에 대해 알아보자. (1) | 2020.01.16 |
[SQL] 동적쿼리를 사용해보자 (feat.SP_EXECUTESQL) (0) | 2019.12.04 |
[SQL] ROW_NUMBER, RANK, DENSE_RANK 차이점 (0) | 2019.12.04 |
[SQL] 쿼리를 잠깐 멈췄다 실행해보자.(feat. sleep / wait / delay) (0) | 2019.12.04 |