IT

[오라클/함수] 문자열 자르기 SUBSTR 함수

생각파워 2016. 12. 9. 15:16

Syntax

 

Description of substr.gif follows

 

Purpose

 

SUBSTR 함수는 정해진 문자를 특정 자릿수만큼 잘라내는 기능을 하는 함수입니다. char 문자열에 대해서 position 에 정해진 자릿수부터 substring_length 자리만큼 잘라내는 것입니다. 

 

예를들어 'ABCDEFG' 문자열에서 중간 'CD' 문자열만 잘라내고 싶을 경우

 

SUBSTR('ABCDEFG', 3, 2) 

 

이렇게 사용하시면 됩니다. 이 문장의 뜻은 'ABCDEFG' 의 3번째 문자(제일 앞자리 A가 1이기 때문에 3이면 세번째자리 'C'를 뜻합니다.)부터 2자리를 잘라내서 리턴하라는 뜻입니다. 

 

 

 

몇가지 예제를 살펴보겠습니다. 

 

1. position 값이 0 일때는 position 값을 1로 처리합니다. 

 

 

2. position 값이 음수일 경우에는 문자 제일 마지막 자리부터 자릿수를 세게 됩니다. SUBSTR('ABCDEFG', -3, 2) 를 수행하게 되면 제일 뒷자리 'G'부터 세자리를 세고, 거기에서 시작하여 오른쪽으로 두자리를 잘라냅니다. 오른쪽에서 세자리면 'E'이고 거기서부터 두자리를 자르는 것이니까 결과는 'EF'가 출력될 것입니다.

 

 

3. substring_length 값을 생략할 경우 position 값에서부터 시작해 문자 끝까지의 값이 리턴됩니다. SUBSTR('ABCDEFG', 2) 라고 하면 둘째자리('B')부터 시작해서 끝문자까지 리턴됩니다. 결과값은 'BCDEFG' 가 되겠죠.

 

 

 

 

상단 문법을 보면 SUBSTR 함수뿐만 아니라 SUBSTRB, SUBSTRC 등과 같이 여러개의 함수가 있는데, 동작되는 방식은 동일합니다. 단지 각각 어느단위를 기준으로 문자를 잘라낼 것인가를 구분한다고 보시면 됩니다. 

 

SUBSTR : 문자 단위

SUBSTRB : 바이트 단위

SUBSTRC : 유니코드 문자 단위

SUBSTR2 : UCS2 문자 단위

SUBSTR4 : UCS4 문자 단위

 

 SUBSTR은 문자를 기준으로 자르게 됩니다. 아래 예를 보면 한글이나 영문자나 각각 한 문자로 인식 하는것을 볼 수 있습니다. 

 

 

그런데 SUBSTRB 함수를 사용하면 리턴되는값이 달라지는것을 볼 수 있습니다. 

SUBSTRB 함수는 1byte 단위로 자르기 때문에 한글자가 3byte를 차지하는 한글에 대해서는 리턴값이 달라지게 됩니다. 한글이 경우 한글자가 3byte를 사용하기 때문에 정확하게 3byte 이상이 잘려져야 한글이 리턴됩니다. 

 

 

위 예제를 정확하게 나오게 하려면 아래와 같이 처리하시면 됩니다. 

 

 

한글 한자가 3byte 를 사용하기 때문에 정확한 한글을 리턴받으려면 SUBSTRB('오라클ORA',1,3)과 같이 세바이트를 잘라야 합니다. 영문자의 경우는 1byte를 사용하기 때문에 SUBSTRB('오라클ORA',10,1)과 같이 처리하면 영문자를 리턴받을 수 있습니다. 

 

SUBSTRC의 경우는 유니코드 문자셋을 사용하기때문에 한글이나 문자나 하나의 단위로 사용하게 됩니다. 그래서 아래와 같이 한단위씩 잘라내도 한글이나 영문자가 문제없이 리턴되게 됩니다. 

 

 

SUBSTR2는 UCS2코드를 , SUBSTR4는 UCS4 코드를 사용하는데, SUBSTRC와 같이 한글을 한 단위로 인식하기 때문에 SUBSTRC와 같은 형식으로 리턴됩니다. 

 

 

 

반응형