/*=======================
학과
-------------------
모바일통신학과
정보통신학과
스마트통신학과계열소프트웨어공학
===============================*/
과 같은 학과명이 있는경우
한글을 30 바이트로 잘라서 오른쪽 정렬로 나타내려면 어떻게 하면 될까여?
select substrb('모바일통신학과', 1, 30)
,LENGTHB(substrb('모바일통신학과', 1, 30)) as 길이
,RPAD(substrb('모바일통신학과', 1, 30),30,' ') AS RPAD_TWO
,LENGTHB(RPAD(substrb('모바일통신학과', 1, 30),30,' ')) as 길이2
from dual;
이렇게 등등 하고 있는데 답이 안 나오네요..
with t as (
select '모바일통신학과' 학과 from dual union all
select '정보통신학과' from dual union all
select '스마트통신학과계열소프트웨어공학' from dual
)
select rpad(학과,30,' ') as data
,LENGTHB(rpad(학과,30,' ') )as length
from t;
(결과)
DATA LENGTH
------------------------------ ----------
모바일통신학과 37
정보통신학과 36
스마트통신학과계열소프트웨어공 45
LENGTH가 30 BYTE가 나와야 하는데... 어렵네요 ?????
현재 한글이 1자당 3 Byte 를 차지합니다.
보통 출력시 보여질 때는 두자리를 차지합니다.
출력 길이를 맞출 것인지? 바이트를 맞출 것인지?
어떤 것이 맞는 것인지 고민해 보시기 바랍니다.
그리고
substr을 하셨는데?
예시 자료는 30자가 안되는 자료 뿐이네요.
30자가 넘는 자료를 자를 경우에도 문제가 되기는 마찬가지입니다.
한글이 2byte(KSC5601, MSWIN949) 를 차지하는 경우와 3byte(UTF8) 를 차지하는 경우가 있고
띄어쓰기나 영문, 기호 등 1Byte 와 섞여 있다 보면
마지막 글자가 한글일 경우 경계선에 걸쳐 있는 한글이 잘려나가는 현상도 있을 수 있습니다.