본문 바로가기
Dev. Handbook/SQL, Oracle, MariaDB

[Oracle] 내장 함수 : 문자열 함수 일람

by breezyday 2022. 4. 28.

Oracle은 많은 내장 함수를 가지고 있습니다.

그중에서 문자열을 조작하는 함수들 가운데 자주 사용되는 것들은 아래와 같습니다.

1. 문자열 함수 목록

함수명 양식 기능 설명
ASCII
CHR
ASCIISTR
UNISTR
ASCII(char)
CHR(num)
ASCIISTR(한글)
UNISTR('유니코드값')
문자의 아스키 코드값 반환
아스키 코드값(숫자)에 해당하는 문자 반환
입력한 글자에 해당하는 유니코드 값을 16진수로 반환
유니코드 값을 문자로 반환
LENGTH
LENGTHB
LENGTH(str)
LENGTH(str)
문자열의 길이를 반환
문자열의 BYTE길이를 반환, 한글 1자는 3BYTE
CONCAT
||
CONCAT(str1, str2)
||
2개의 문자열만 연결해서 반환
다수의 문자열을 연결할 때 사용
INSTR
INSTRB
INSTR(str, substr, pos, nth)
INSTRB(str, substr, pos, nth)
문자열(str)에서 시작위치(pos)에서 검색하여 부분문자열(substr)이 시작하는 위치를 반환
nth는 2번째 이상을 검색할 때 사용
pos, nth는 입력하지 않을 때는 1
INSTRB는 BYTE단위로 위치를 반환
LOWER
UPPER
LOWER(str)
UPPER(str)
대문자를 소문자로 변경
소문자를 대문자로 변경
INITCAP INITCAP(str) 첫글자를 모두 대문자로 변경
숫자는 제외하고, 특수문자, 한글, 공백 다음의 알파벳
REPLACE PEPLACE(str, src_str, rep_str) 문자열(str)에서 원래 문자열(src_str)을 찾아서 바꿀 문자열(rep_str)로 치환함
TRANSLATE TRANSLATE(str, from, to) 문자열(str)에서 from 문자들을 to문자들로 한 문자씩 매핑하여 변환한다.
SUBSTR
SUBSTRB
SUBSTR(str, pos, len)
SUBSTRB(str, pos, len)
문자열(str)에서 시작위치(pos)에서부터 길이(len)만큼 잘라서 반환. 길이(len)을 입력하지 않으면 문자열 끝까지 반환
pos가 음수이면 맨끝에서부터 시작한 상대적 위치
SUBSTRB는 BYTE단위로 처리함, 한글은 3BYTE로 잘라서 반환.
LPAD
RPAD
LPAD(str1, len, str2)

RPAD(str1, len, str2)

LPAD는 문자열(str1)을 길이(len)만큼 늘린 다음, (str2)로 문자열(str1)앞에 채운다. 
RPAD는 문자열(str1)을 길이(len)만큼 늘린 다음, (str2)로 문자열(str1)뒤에 채운다. 
LTRIM
RTRIM
LTRIM(str, substr)
RTRIM(str, substr)

LTRIM 문자열(str)의 처음에서 제거할 문자열(subst)을 제거 
RTRIM 문자열(str)의 마지막에서 제거할 문자열(substr)을 제거
제거할 문자열(substr)을 입력하지 않으면 공백을 제거
TRIM TRIM(dir str1 FROM str2) 문자열(str2)에서 방향(dir)에 따라 제거할 문자열(str1)을 제거
dir : LEADING(앞), BOTH(양쪽), TRAILING(뒤)
TRIM(str2)와 같이 사용하면 양쪽 공백을 제거
REGEXP_COUNT REGEXP_COUNT(str1, str2) 문자열(str1)에서 문자열(str2)의 개수를 반환

 

1.1 ASCII(char), CHR(num), ASCIISTR(unistr), UNISTR('unicode')

ASCII(char)           : 1개의 문자의 아스키코드값 반환
CHR(num)             : 아스키 코드값(num:숫자)에 해당하는 문자 반환
ASCIISTR(unistr)   : 입력한 글자에 해당하는 유니코드 값을 16진수로 반환
UNISTR('unicode') : 유니코드 값을 문자로 반환.

 

SELECT ASCII('A'), ASCII('BA'), CHR(65) FROM DUAL;
       ----------  -----------  -------  
       65          66           [A]
       
SELECT ASCIISTR('한글'), UNISTR('\D55C\AE00') FROM DUAL;
       ----------------  -------------------- 
       [\D55C\AE00]      [한글]

1.2 LENGTH(str), LENGTHB(str)

LENGTH(str)    : 문자열(str)의 길이를 반환
LENGTHB(str)  : 문자열(str)의 BYTE길이를 반환, 한글 1자는 3BYTE

 

SELECT LENGTH('AB'), LENGTHB('AB') FROM DUAL;
       ------------  -------------
       2             2            
       
SELECT LENGTH('대한민국'), LENGTHB('대한민국') FROM DUAL;
       -----------------  -------------------
       4                  12

1.3 CONCAT(str1, str2), || 

CONCAT(str1, str2)  :2개의 문자열만 연결해서 반환
||                              : 다수의 문자열을 연결할 때 사용

 

SELECT CONCAT('I Have', ' A Dream'), 'I Have' || ' A' || ' Dream' FROM DUAL;
       ----------------------------  ----------------------------
              [I Have A Dream]       [I Have A Dream]

1.4 INSTR(str, substr, pos, nth), INSTRB(str, substr, pos, nth)

INSTR  : 문자열(str)에서 시작위치(pos)에서 검색하여 부분 문자열(substr)이 시작하는 위치를 반환한다. nth는 2번째 이상을 검색할 때 사용한다. pos, nth는 입력하지 않을 때 1이 된다.

-- 문장에서 7번째 문자부터 'pre'를 찾아서 위치를 반환
SELECT INSTR('prefix, precise, preface', 'pre', 7) FROM DUAL;
-- 결과 : 9

-- 문장에서 7번째 문자부터 두번째 'pre'를 찾아서 위치를 반환
SELECT INSTR('prefix, precise, preface', 'pre', 7, 2) FROM DUAL;
-- 결과 : 18

 

SELECT INSTR('이것은 Dog입니다. 저것은 Cat입니다', '것은') FROM DUAL;
       ---------------------------------------------------
       2
SELECT INSTR('이것은 Dog입니다. 저것은 Cat입니다', '것은', 1, 1) FROM DUAL;
       ---------------------------------------------------------
       2

 

INSTRB : BYTE단위로 위치를 반환한다.

 

-- 문자 단위 
SELECT INSTR('이것은 Dog입니다. 저것은 Cat입니다', '것은', 1, 2) FROM DUAL;
       ---------------------------------------------------------
       14

-- BYTE 단위
SELECT INSTRB('이것은 Dog입니다. 저것은 Cat입니다', '것은', 2, 2) FROM DUAL;
       ----------------------------------------------------------
       28

1.5 LOWER(str), UPPER(str)

LOWER(str)  : 대문자를 소문자로 변경
UPPER(str)    : 소문자를 대문자로 변경

 

SELECT LOWER('Never Say Goodbye'), UPPER('Never Say Goodbye') FROM DUAL;
       --------------------------  -------------------------
             [never say goodbye]         [NEVER SAY GOODBYE]

1.6 INITCAP(str)

INITCAP(str) : 첫글자를 모두 대문자로 변경, 숫자는 제외하고, 특수문자, 한글, 공백 다음의 알파벳

 

SELECT INITCAP('never say goodbye') FROM DUAL;
       ----------------------------
               [Never Say Goodbye] 

-- 숫자는 제외, 특수문자,한글,공백 다음의 알파벳
SELECT INITCAP('never6say*good가bye') FROM DUAL;
       ----------------------------
               [Never6say*Good가Bye]

1.7 PEPLACE(str, src_str, rep_str)

PEPLACE(str, src_str, rep_str) : 문자열(str)에서 원래 문자열(src_str)을 찾아서 바꿀 문자열(rep_str)로 치환함

 

SELECT REPLACE('  ABC DEF ', ' ', '') FROM DUAL;
       ------------------------------
               [ABCDEF]

1.8 TRANSLATE(str, from, to)

TRANSLATE(str, from, to) : 문자열(str)에서 from 문자들을 to문자들로 한 문자씩 매핑하여 변환한다.

-- 'B'는 'b', 'C'는 ' ', 'D'는 'z'로 치환된다.
SELECT TRANSLATE('ABBBBCCDDEEE', 'BCD', 'b z') AS tran FROM DUAL;
       -------------------------------------
                 [Abbbb  zzEEE]

-- 'R'은 'O', 'M'은 'N', 'G'는 ' '으로 치환된다.
SELECT TRANSLATE('PROGRAMMING', 'RMG', 'ON ') AS tran FROM DUAL;
       ------------------------------------
                 [POO OANNIN ]

1.9 SUBSTR(str, pos, len), 

SUBSTR(str, pos, len) : 문자열(str)에서 시작 위치(pos)에서부터 길이(len)만큼 잘라서 반환. 길이(len)를 입력하지 않으면 문자열 끝까지 반환. pos가 음수이맨끝에서부터 시작한 상대적 위치

 

SELECT SUBSTR('ABCDEFG', 2, 4), SUBSTR('ABCDEFG', -2, 4) FROM DUAL;
       -----------------------  ------------------------
              [BCDE]                   [FG]

 

SUBSTRB는 BYTE단위로 처리함, 한글은 3BYTE로 잘라서 반환. 3BYTE 단위가 아니면 BYTE 수만큼의 공백으로 채운다.

SELECT SUBSTRB('ABCDEFG', 1, 4), SUBSTRB('가나다라마바', 1, 4) FROM DUAL;
       ------------------------  ------------------------------
                [ABCD]                   [가]

-- 한글은 3BYTE단위로 처리, BYTE개수가 모자라면 공백으로 반환
SELECT SUBSTRB('ab가나다', 2, 5), SUBSTRB('ab가나다', 2, 7) FROM DUAL;
       -------------------------  ------------------------------
                [b가  ]                   [b가나]

 

1.10 LPAD(str1, len, str2), RPAD(str1, len, str2)

LPAD(str1, len, str2) : 문자열(str1)을 길이(len)만큼 늘린 다음, (str2)로 문자열(str1) 앞에 채운다.

 

SELECT LPAD('111-1111', 12, '(02)'), LPAD('111-1111', 16, '(02)') FROM DUAL;
       ----------------------------  ---------------------------- 
            [(02)111-1111]                [(02)(02)111-1111]


RPAD(str1, len, str2) : 문자열(str1)을 길이(len)만큼 늘린 다음, (str2)로 문자열(str1)뒤에 채운다.

 

SELECT RPAD('111-1111', 12, '(02)'), RPAD('111-1111', 16, '(02)') FROM DUAL;
       ----------------------------  ----------------------------
            [111-1111(02)]                [111-1111(02)(02)]

 

1.11 LTRIM(str, substr), RTRIM(str, substr)

LTRIM : 문자열(str)의 처음에서 제거할 문자열(subst)을 제거 
RTRIM : 문자열(str)의 마지막에서 제거할 문자열(substr)을 제거

 

SELECT LTRIM('ABCDEFGABC', 'ABC'), LTRIM('가나다라', '가') FROM DUAL;
       --------------------------  ----------------------
             [DEFABC]                    [나다라]

SELECT RTRIM('ABCDEFGABC', 'ABC'), RTRIM('가나다라', '라') FROM DUAL;
       --------------------------  ----------------------
             [ABCDEFG]                    [가나다]


제거할 문자열(substr)을 입력하지 않으면 공백을 제거

 

-- 문자열 앞 공백 제거
SELECT LTRIM('  ABC ') FROM DUAL;
       --------------------
             [ABC ]

-- 문자열 앞뒤 공백 제거
SELECT LTRIM(RTRIM(' ABCD   ')) FROM DUAL;
       ------------------------
                   [ABCD]

 

1.12 TRIM(dir str1 FROM str2)

TRIM(dir str1 FROM str2) : 문자열(str2)에서 방향(dir)에 따라 제거할 문자열(str1)을 제거
dir : LEADING(앞), BOTH(양쪽), TRAILING(뒤)

 

SELECT TRIM(BOTH 'ㅋ' FROM 'ㅋㅋㅋ재미있어요.ㅋㅋ') FROM DUAL;
       --------------------------------------------
                           [재미있어요.]


TRIM(str2)와 같이 사용하면 양쪽 공백을 제거

 

SELECT TRIM('   ABCD  ') FROM DUAL;
       -----------------
            [ABCD]

 

1.13 REGEXP_COUNT(str1, str2)

REGEXP_COUNT(str1, str2) : 문자열(str1)에서 문자열(str2)의 개수를 반환

 

SELECT REGEXP_COUNT('This is Oracle.', 'is') FROM DUAL;
       -------------------------------------
       2
       
SELECT REGEXP_COUNT('이것은 Oracle이다.', '이') FROM DUAL;
       ----------------------------------------
       2

 

 

 

참고

https://docs.oracle.com/database/121/SQLRF/functions002.htm#SQLRF20032

https://docs.oracle.com/database/121/SQLRF/functions002.htm#SQLRF51180

 

 

 

 

 

댓글