개발자였던 것/데이터베이스

[Oracle] subSTR와 subSTRB

서으이 2020. 12. 2. 12:23
728x90
반응형

 

오라클에서 SUBSTR 함수는 문자열을 자를 때 사용하는 기본 함수이다. 

문자 단위로 자를때는자를 때는 SUBSTR 함수를 사용하고, 바이트 단위로 자를 때는 SUBSTRB 함수를 사용하면 된다.

 

SUBSTR(char, m ,[n]), SUBSTRB(char, m ,[n])

 

SUBSTR 함수는 m 번째 자리부터 길이가 n개인 문자열을 반환 한다.

m이 음수일 경우에는 뒤에서 m 번째 문자부터 n개의 문자를 반환한다.

SUBSTRB 함수에서 B Byte단위로 처리하겠다는 의미이다.

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
-- 세번째 이후 문자열 반환.
SELECT SUBSTR('oracleclub'3) name FROM DUAL;
 
 
NAME
--------
acleclub
 
 
-- 세번째 이후 네개의 문자열 반환.
SELECT SUBSTR('oracleclub'34) name FROM DUAL;
 
 
NAME
----
acle
 
 
-- 뒤에서 세번째아후 두개의 문자열 반환.
SELECT SUBSTR('oracleclub'-32) name FROM DUAL;
 
 
NA
--
lu
cs

 

SUBSTR 함수 (문자 단위)

SUBSTR 함수는 문자 단위로 시작 위치와 자를 길이를 지정하여 문자열을 자른다.

SUBSTR("문자열", "시작위치", "길이")

 

1
2
3
4
5
6
7
8
9
10
11
12
-- 앞에서부터 문자열을 자르는 방법
 
WITH EMP AS (
    SELECT '7566' EMPNO, 'JONES' ENAME, '매니저' JOB FROM DUAL
)
 
SELECT ENAME
     , SUBSTR(ENAME, 2)
     , SUBSTR(ENAME, 23)
     , JOB
     , SUBSTR(JOB, 21)
  FROM EMP
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
-- 뒤에서부터 문열을 자르는 방법]
 
WITH EMP AS (
    SELECT '7566' EMPNO, 'JONES' ENAME, '매니저' JOB FROM DUAL
)
 
SELECT ENAME
     , SUBSTR(ENAME, -3)
     , SUBSTR(ENAME, -32)
     , JOB
     , SUBSTR(JOB, -31)
  FROM EMP
cs


SUBSTRB 함수 (바이트 단위)

SUBSTRB 함수는 바이트 단위로 문자열을 자를 때 사용한다.

한글 같은 경우 문자 단위로 자를 때 깨지는 경우가 있다.

이럴 때는 바이트 단위로 자르는 깨지는 걸 방지할 수 있다.

오라클 세팅에 따라서 한글이 3byte 또는 2 btye 일수 있으니 아래의 문자셋 쿼리로 오라클 세팅을 확인 후 사용하자.

SUBSTRB("문자열", "시작위치", "길이") 

 

1
2
3
4
-- 오라클 문자셋 확인 쿼리
SELECT * 
    FROM nls_database_parameters 
WHERE parameter LIKE '%CHARACTERSET%'
cs

 

1
2
3
4
5
6
7
8
SELECT 
    SUBSTRB('ABCDEFG'14), SUBSTRB('가나다라마바사'14)
FROM DUAL;
 
 
    SUBSTRB('ABCDEFG',1,4)       SUBSTRB('가나다라마바사',1,4)
    --------------------------- ---------------------------------
    ABCD                        가나
cs

 

728x90
반응형