CASE문의 사용법은 자바와 같다

CASE
    WHEN 컬럼명 + 조건
    THEN 위 조건이 맞다면 
    ELSE 아니라면
END

 

 

하지만 특정 조건이 있는데 아래코드로 설명하겠다

BOARDID 컬럼은 NVARCHAR이라고 가정하자
BOARDNUMBER 컬럼은 VARCHAR이라고 가정하자
''로 선언된 문자열은 VARCHAR이라고 가정하자

CASE
    WHEN BOARDID IS NOT NULL --boardId가 null이 아니라면
    THEN TO_CHAR(CONCAT('0_', BOARDID)) --boardId 값 앞에 0_문자열을 붙이고 문자열로 변환
    WHEN BOARDNUMBER IS NOT NULL  --boardId가 null이 아니라면
    THEN TO_CHAR(CONCAT('0', BOARDNUMBER))
    ELSE NULL -- 두 조건 전부 아니라면 NULL을 반환
END

 

특정조건을 만족했을 때의 THEN의 반환값을 TO_CHAR()을 사용해 데이터 타입을 통일 시켰다

오라클의 CASE문은 THEN에 작성하는 반환타입이 전부 동일해야만한다

 

도중에 CONCAT()을 사용해 문자열을 붙였지만

기본적으로 "함수가 반환하는 값의 데이터 타입은 기본값을 기준"으로 하기때문에

BOARDID가 NVARCHAR라면 CONCAR()함수를 사용해 문자열을 합쳤으면

합친 문자열(반환값)도 NVARCHAR타입이다 

CONCAT('0_', BOARDID)

 

그렇기 때문에 아래처럼 TO_CHAR()을 사용해 VARCHAR타입으로 변환해주는 작업이 필요하다

TO_CHAR(CONCAT('0_', BOARDID))

 

만인 THEN에 작성하는 반환값이 NUBER형이라면 CASE문의 모든 반환타입은 NUMBER타입이여만 하므로

TO_NUMBER()를 사용해 데이터 타입을 통일 시켜주어야 한다

+ Recent posts