[Oracle] SUBSTR, SUBSTRB 함수 사용법 (문자열 자르기)

오라클에서 문자열을 자를 때는 SUBSTR 함수를 사용한다. 다른 DB의 SQL 함수인 SUBSTRING, LEFT, RIGHT 함수와 동일한 기능을 하며, 문자열을 바이트 단위로 자를 때는 SUBSTRB 함수를 사용하면 된다. SUBSTR 함수는 자를 문자열의 시작위치와 자를 길이를 사용하여 문자열을 자르며, 뒤에서 문자열을 자를 때는 시작 위치를 음수(-) 값으로 부여하면 된다.

 

오라클 문자열 자르기

목차
  1. 문자열 자르기 (SUBSTR)
  2. 뒤에서부터 문자열 자르기 (SUBSTR)
  3. 바이트 단위로 문자열 자르기 (SUBSTRB)

 

문자열 자르기 (SUBSTR)

WITH emp AS (
    SELECT '7566' empno, 'JONES' ename, '매니저' job FROM dual
)

SELECT ename
     , SUBSTR(ename, 2)
     , SUBSTR(ename, 2, 3)
     , job
     , SUBSTR(job, 2, 1)
  FROM emp

 

 

사용법:  SUBSTR("문자열", "시작위치", "길이")

 

SUBSTR(ename, 2): 문자열의 두 번째 위치("O")부터 문자열 끝까지 자른다.

SUBSTR(ename, 2, 3): 문자열의 두 번째 위치("O")부터 세 자리("ONE")까지 자른다.

 

뒤에서부터 문자열 자르기 (SUBSTR)

WITH emp AS (
    SELECT '7566' empno, 'JONES' ename, '매니저' job FROM dual
)

SELECT ename
     , SUBSTR(ename, -3)
     , SUBSTR(ename, -3, 2)
     , job
     , SUBSTR(job, -3, 1)
  FROM emp

 

 

뒤에서부터 문자열을 자를 때는 시작위치에 음수(-) 값을 입력하면 된다.

 

SUBSTR(ename, -3): 문자열의 뒤에서 세 번째 위치("N")에서 문자열 끝까지 자른다.

SUBSTR(ename, -3, 2): 문자열의 뒤에서 세 번째 위치("N")에서 두 자리("NE")까지 자른다.

 

바이트 단위로 문자열 자르기 (SUBSTRB)

WITH emp AS (
    SELECT '7566' empno, 'JONES' ename, '매니저' job FROM dual
)

SELECT ename
     , SUBSTRB(ename, 2, 3)
     , job
     , SUBSTRB(job, 4)
     , SUBSTRB(job, 7, 3)
  FROM emp

 

 

사용법:  SUBSTRB("문자열", "시작위치", "길이") 

 

SUBSTRB 함수는 바이트 단위로 문자열을 자를 때 사용한다. 한글 같은 경우 문자단위로 자를 때 깨지는 경우가 있다. 이럴 때는 바이트 단위로 자르는 깨지는 걸 방지할 수 있다. 오라클 세팅에 따라서 한글이 3byte 또는 2btye 일수 있으니 아래의 문자셋 쿼리로 오라클 세팅을 확인 후 사용하자.

 

오라클 문자셋 확인 쿼리

SELECT * 
  FROM nls_database_parameters 
 WHERE parameter LIKE '%CHARACTERSET%'

 


[3byte 문자셋]

 


[2byte 문자셋]

 

한글을 지원하는 문자셋은 KO16KSC5601(2byte), KO16MSWIN949(2byte), UTF8(3byte), AL32UTF8(3byte)가 있다.

  

사용 예제

▲ 앞에서부터 문자열을 자르는 예제 (Left)

 

▲ 뒤에서부터 문자열을 자르는 예제 (Right)

 

▲ 바이트 단위로 문자열을 자르는 예제 (아래 예제는 3byte)

 

 

댓글

Designed by JB FACTORY