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
'Dev. Handbook > SQL, Oracle, MariaDB' 카테고리의 다른 글
[Oracle] 내장함수 : 비교함수, 디코딩 함수 (0) | 2022.05.22 |
---|---|
[Oracle] 내장 함수 : NULL 관련 함수 (1) | 2022.05.14 |
[Oracle] 내장 함수 : 형 변환 함수 (0) | 2022.05.13 |
[Oracle] 내장 함수 : 날짜 함수, 시간 함수 (0) | 2022.05.10 |
[Oracle] 내장 함수 : 숫자 함수, 수학 함수 (0) | 2022.05.02 |
댓글