dev_eunz

[ORACLE] 한글 3BYTE인데, 2BYTE 기준으로 길이맞추기. LENGTHB 사용 본문

IT/프로그래밍

[ORACLE] 한글 3BYTE인데, 2BYTE 기준으로 길이맞추기. LENGTHB 사용

은그램 2020. 11. 8. 11:22
728x90
반응형

오라클에서 어떤 포맷을 사용하느냐에 따라서

한글이 3BYTE로 인식되기도, 2BYTE로 인식되기도 한다.

 

 

나의 경우,

UTF-8 타입을 사용중이어서 3BYTE로 인식되고 있었다.

 

 

600 BYTE로 잘라서 보내야되는 데이터가 있었는데,

RPAD를 이용하여 600으로 맞췄음에도 데이터 차이가 있었다.

 

 

RPAD/LPAD를 사용할 때에는 한글을 2BYTE로 인식하고 있었다.

 

SELECT RPAD('오라클', 10, '1') FROM DUAL

출력 >> 오라클1111

 

데이터가 몇 바이트인지 확인하기 위해서는 LENGTHB 함수를 사용해야 하는데,

이 경우에 LENGTHB를 하면, 13이 나오게 되는 것이었다.

 

 

이를 어떻게 처리해야하나 🤔,

CONVERT 함수를 사용해서 한글포맷을 변경해서 길이를 구하면 된다.

 

 

+ 600에 맞춰서 데이터를 추출해야했기 때문에,

SUBSTR을 아래와 같이 함께 사용해서 처리하게 되었다.

SELECT
           CASE WHEN LENGTHB(CONVERT(RPAD('오라클', 10, '1'), 'KO16MSWIN949')) > 10
                    THEN SUBSTR(RPAD('오라클', 10, '1'), 0, LENGTH(RPAD('오라클', 10, '1')) - LENGTHB(CONVERT(RPAD('오라클', 10, '1'), 'KO16MSWIN949')) - 10 ))
                    ELSE RPAD('오라클', 10, '1') END
FROM DUAL;

 

728x90
반응형
Comments