티스토리 뷰
한글이 포함된 문자열을 바이트로 자르면 바이트 수에 따라 마지막 문자가 깨져 보이는 경우가
있습니다. 한글이 2바이트로 사용되기 때문이죠. (문자셋에 따라 다르지만 일반적으로....)
그래서 특정 바이트로 문자열을 자르려고 하는 경우에 마지막 문자가 깨질 경우엔 1바이트를
자동으로 덜 자르게 해서 문자가 깨져보이지 않게 하는 함수를 만들어 보았습니다.
1.FN_SUBSTRB_KOR() 함수
-------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION FN_SUBSTRB_KOR(ps_korStr IN VARCHAR2
,pi_byteCnt IN PLS_INTEGER
) RETURN VARCHAR2
IS
/************************************************************************************
VERSION: v1.0
DATE :
AUTHOR :
DESCRIPTION: 한글이 포함된 문자열을 원하는 바이트로 자르는 함수.
ps_korStr: 대상문자열
pi_byteCnt: CUTOFF BYTE 수
PLSQL_CODE_TYPE: NATIVE
************************************************************************************/
ls_korStr VARCHAR2(1000) := '';
BEGIN
IF ps_korStr IS NULL OR LENGTHB(ps_korStr) = 0 THEN
RETURN NULL;
END IF;
IF pi_byteCnt = 0 OR pi_byteCnt >= 1000 THEN
RETURN NULL;
END IF;
IF LENGTHB(ps_korStr) <= pi_byteCnt THEN
RETURN ps_korStr;
END IF;
SELECT DECODE(MOD_NUM,0,SUBSTRB(ps_korStr,1,pi_byteCnt)
,SUBSTRB(ps_korStr,1,pi_byteCnt-1)
)
INTO ls_korStr
FROM
(
SELECT MOD(SUM(DECODE(ASCII(TO_SINGLE_BYTE(SUBSTRB(ps_korStr, ROWNUM, 1))),32,1,0)),2) MOD_NUM
FROM
(
SELECT LEVEL
FROM DUAL
CONNECT BY LEVEL <= pi_byteCnt
)
)
;
RETURN ls_korStr;
END;
-------------------------------------------------------------------------------
2. 사용법
SELECT FN_SUBSTRB_KOR('가1나',4)
,LENGTHB(FN_SUBSTRB_KOR('가1나',4))
,SUBSTRB('가1나',1,4)
FROM DUAL;
==> 함수를 통하면 3바이트가 리턴된고, SUBSTRB로 하면 당연히 4바이트가 리턴됩니다.
PS/ 생각해보니 위 함수에 쓸데없는 부분이 있네요. 마지막 2바이트만 검사해도 될 것을 ~~~
- Total
- Today
- Yesterday
- 파나소닉 비데 DL-EH10KWS
- Life Chair
- 루미큐브 종류
- GKRS
- 화분벌레
- 별이 빚나는 밤
- 카카오 에드
- 솔리드 쿨론
- weka
- 유가바이트디비
- node.js
- 빈센트 반 고흐
- JMW 헤어드라이기기
- Sybase IQ
- 브리다 정수기
- VARIDESK
- 매직 트랙패드2
- Pixel Pals
- 별잉 빛나는 밤
- yugabyteDB
- 톡토기
- 배당급
- 르세라핌
- 오미크론
- 고체 향수
- 로니카 BCS
- 남설 팔찌
- 코라나 19
- 증권정보포털
- 홈 오피스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |