Oracle SQL 강좌
Character Functions (문자형 함수) 34 34 99,999+

by 구루비 CONCAT INITCAP LOWER LPAD LTRIM RPAD RTRIM SUBSTR TRANSLATE TRIM UPPER INSTR LENGTH [2002.01.20]


문자형 함수란 CHAR, VARCHAR2 타입을 인수로 받아 VARCHAR2 타입의 값을 반환하는 함수이다.

CONCAT(char1, char2)

CONCAT 함수는 Concatenation의 약자로 두 문자를 결합하는 역할을 한며, "||" 연산자와 같은 역할을 한다.

 
-- CONCAT 예제
SELECT CONCAT('www.', 'oracleclub')||'.com' name FROM DUAL;

NAME
------------------
www.gurubee.net

INITCAP(char), LOWER(char), UPPER(char)

INITCAP : 주어진 문자열의 첫 번째 문자를 대문자로 변환시켜 준다.

LOWER : 주어진 문자열을 소문자로 변환시켜 준다.

UPPER : 주어진 문자열을 대문자로 변환시켜 준다.

 
-- INITCAP, LOWER, UPPER 예제
SELECT INITCAP('oracleclub') name FROM DUAL
 UNION ALL
SELECT UPPER('oracleclub') name FROM DUAL
 UNION ALL
SELECT LOWER('oracleclub') name FROM DUAL;

NAME
----------
Oracleclub
ORACLECLUB
oracleclub

LPAD(char1, n [,char2]), RPAD(char1, n [,char2])

LPAD : 왼쪽에 문자열을 끼어 놓는 역할을 한다.

RPAD : 오른쪽에 문자열을 끼어 놓는 역할을 한다.

n은 반환되는 문자열의 전체 길이를 나타내며, char1의 문자열이 n보다 클 경우 char1을 n개 문자열 만큼 반환 한다.

 
-- LPAD, RPAD 예제
SELECT LPAD('oracleclub', 12, '*') name FROM DUAL
 UNION ALL
SELECT RPAD('oracleclub', 12, '*') name FROM DUAL;

NAME
------------
**oracleclub
oracleclub**

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

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

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

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

 
-- 세번째 이후 문자열 반환.
SELECT SUBSTR('oracleclub', 3) name FROM DUAL;

NAME
--------
acleclub


-- 세번째 이후 네개의 문자열 반환.
SELECT SUBSTR('oracleclub', 3, 4) name FROM DUAL;

NAME
----
acle


-- 뒤에서 세번째아후 두개의 문자열 반환.
SELECT SUBSTR('oracleclub', -3, 2) name FROM DUAL;

NA
--
lu


-- DB가 UTF-8인 경우 아래 SQL의 결과는?.
SELECT SUBSTRB('오라클클럽',1) name FROM DUAL
 UNION ALL
SELECT SUBSTRB('오라클클럽',3) name FROM DUAL;

LENGTH(char), LENGTHB(char)

문자열의 길이를 반환 한다.

 
-- 문자열의 LENGTH를 조회하는 예제.
SELECT LENGTH('오라클클럽') len FROM DUAL
 UNION ALL
SELECT LENGTHB('오라클클럽') len FROM DUAL;

-- DB가 UTF-8인 경우
LEN
--------
       5
      15

REPLACE(char1, str1, str2)

REPLACE는 문자열의 특정 문자를 다른 문자로 변환 한다.

 
-- 간단한 REPLACE 예이다.
SELECT REPLACE('oracleclub','oracle','db') name FROM DUAL;

NAME
------
dbclub 


-- 대소문자를 구분한다는 것을 알수 있다.
SELECT REPLACE('OracleClub','oracle','DB') name  FROM DUAL
 UNION ALL
SELECT REPLACE('OracleClub','Oracle','DB') name  FROM DUAL;

NAME
----------
OracleClub
DBClub 

INSTR (char1, str1, m, n)

문자열이 포함되어 있는지를 조사하여 문자열의 위치를 반환 한다. 지정한 문자열이 발견되지 않으면 0이 반환 된다.

char1 : 지정문자, str1 : 검색문자, m:시작위치, n:검색순위

 
-- 지정한 문자 OK가 발견되지 않아 0을 반환.
SELECT INSTR('CORPORATE FLOOR','OK') idx FROM DUAL;

IDX
----------
         0


-- OR이 있는 위치 2를 반환. 왼쪽부터 비교를 한다는 것을 알 수 있다.
SELECT INSTR('CORPORATE FLOOR','OR') idx FROM DUAL;

IDX
----------
         2


-- 왼쪽에서 세 번째부터 시작을 해서 검색된 OR의 위치를 반환 한다.
SELECT INSTR('CORPORATE FLOOR','OR', 3) idx FROM DUAL;

IDX
----------
         5


-- 왼쪽에서 세 번째부터 시작을 해서 비교를 하여 OR이 두 번째 검색되는 지점의 위치를 반환 한다.
SELECT INSTR('CORPORATE FLOOR','OR', 3, 2) idx FROM DUAL;

IDX
----------
        14

TRIM (char1[,char2]), LTRIM (char1[,char2]), RTRIM (char1[,char2])

TRIM : 특정한 문자를 제거 한다. 제거할 문자를 입력하지 않으면 기본적으로 공백이 제거 된다.

LTRIM : 왼쪽부터 문자를 제거 한다. 제거할 문자를 입력하지 않으면 기본적으로 왼쪽 공백이 제거 된다.

RTRIM : 오른쪽부터 문자를 제거 한다. 제거할 문자를 입력하지 않으면 기본적으로 오른쪽 공백이 제거 된다.

 
-- o와 공백을 제거 하는 TRIM 예제이다.
SELECT TRIM('o' FROM 'oracleclub') name FROM DUAL
UNION ALL
SELECT TRIM(' oracleclub ') name FROM DUAL;

NAME
----------
racleclub
oracleclub


-- 왼쪽의 문자열을 TRIM하는 예제이다. 
-- 공백의 경우 왼쪽 공백만 제거 되는 것을 확인 할 수 있다.
SELECT LTRIM('oracleclub','oracle') name FROM DUAL
UNION ALL
SELECT REPLACE(LTRIM(' oracleclub '),' ','*') name FROM DUAL;

NAME
-----------
ub
oracleclub*


-- 오른쪽의 문자열을 TRIM 하는 예제이다. 
-- 공백의 경우 오른쪽 공백만 제거 되는 것을 확인 할 수 있다.
SELECT RTRIM('oracleclub','club') name FROM DUAL
UNION ALL
SELECT REPLACE(RTRIM(' oracleclub '),' ','*') name FROM DUAL;

NAME
-----------
oracle
*oracleclub

Oracle Character Functions

CHR
CONCAT
INITCAP
LOWER
LPAD
LTRIM
NLS_INITCAP
NLS_LOWER
NLSSORT
NLS_UPPER
REGEXP_REPLACE
REGEXP_SUBSTR
REPLACE
RPAD
RTRIM
SOUNDEX
SUBSTR
TRANSLATE
TREAT
TRIM
UPPER

참고링크

- 강좌 URL : http://www.gurubee.net/lecture/1025

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 임진영 [2004.05.17 16:49:00]
밑에 LTRIM의 예시가 맞는건지요? ㅡ.ㅡ?

by ibluesky [2004.05.18 14:31:58]
'xXxyLAST WORD'가 맞을겁니다..

by 테스터 [2004.05.29 09:58:10]
위의 결과 맞습니다. 'XxyLAST WORD' 로 출력됩니다.

by 김형노 [2004.06.25 12:25:35]
LTRIM예시 맞습니다. 그러니깐 LTRIM 안에 'xy'있죠?
x,y 순서가 중요한게 아니고 x 나 y 가 아닌 다른 문자가 나올때까지 지웁니다.
'xyX' 를 넣으면 'LAST WORD'만 나옵니다.

by 신효식 [2004.07.13 11:24:39]
아항....대소문자를 가린단 말이군요....

by 나그네 [2004.08.13 14:09:15]
LAST WORD가 맞습니다...

by 박성훈 [2004.08.28 10:35:58]
결과가 좀 다른데요.
SQL> SELECT INITCAP('kim jung sick') NAME FROM dual ;
NAME
--------------------------
Kim Jung Sick

SQL> SELECT INITCAP('kimjungsick') NAME FROM dual;

NAME
----------------------
Kimjungsick

요렇게 나옵니다.


by INIYA [2004.09.01 15:55:40]
예시가 맞는데요...

by chals [2004.09.22 11:41:13]
박성훈님이 맞는데여... 예시가 틀린거 같네여...

by 실행자 [2004.10.07 17:01:50]
'XxyLAST WORD' 로 나옵니다. 실행 결과입니다.

by 오라~ [2004.11.03 16:12:16]
SELECT TRIM(0 FROM 0009872348900) "TRIM Example" FROM DUAL; 안되는데여;;

by 가락지 [2004.12.13 16:41:42]
앙.! 형노님 말씀이 맞는듯 하네영..
글구..오라~님..
"TRIM Example" 얘는 TRIM Example 얘겠지영..^^
따옴표없애기 ..

by LinDol [2005.10.26 11:48:09]
따옴표를 넣어야 됩니다.
안그러면 TRIM을 인식해 버려요
방금 배웠음 크

by smile [2005.11.09 20:12:45]
퍼갑니다. ^^

by 기쁜우리 [2006.05.29 12:11:14]
퍼갑니다.

by 기쁜우리 [2006.05.29 12:11:15]
퍼갑니다.

by 엽 [2006.09.20 11:31:27]
처음엔 RPAD 나 LPAD 가 왜 있나 싶었습니다.
CONCAT 으로 가능하다고 생각했으니요
그러다 오타때문에 차이점을 알게되었네요
pad 는 문자열 만큼 앞뒤로 채울수 있네요

by 차니 [2006.11.07 16:03:01]
TRIM 에서 제거할 문자를 입력하지 않으면 기본적으로 공백이 제거 된다고했는데..
여기서 공백은 ' ' ...블랭크가 아닌 문자 공백 인가요..??

by kaiger [2006.12.08 17:32:36]
감사여

by 진 [2007.07.13 15:17:57]
오라님 SELECT TRIM(0 FROM 0009872348900) "TRIM Example" FROM DUAL;
잘되는데요.
그리고 숫자 사이에 있는 0은 그대로 나오네요?
SELECT TRIM(0 FROM 000123045600) TRIM FROM DUAL;
TRIM
---------
1230456
이거 혹시 좌우양쪽에서 0이 아닌게 나올때까지 잘라내고 끝나나요?
LTRIM과 RTRIM이 둘다 적용되는것 같다는..
SELECT TRIM('c' FROM 'ccabcdcc') "TRIM Example" FROM DUAL;
TRIM Example
--------------
abcd

by 임현상 [2008.02.27 20:47:50]
저기 죄송한데요 오라클에 입력 되어 있는 값이 a b c라면 되어 있으면
a b c 을 공백 제거해서 abc로 화면에 출력하는 법좀 알려주세요
trim을 쓰는것 같은데 정확이 어떻게 쓰는건지 모르겠네요


by 현 [2008.02.28 09:20:30]
임현상님..
그럴땐 replace를 쓰시면 됩니다.
trim은 앞뒤에 공백이 있을때 사용하시면 되구요, replace는 어떤 값을 다른 값으로 치환할때 사용하시면 되요.
select replace('a b c',' ','') from dual 이렇게요....

by 웅 [2008.02.28 09:20:31]
replace 하세요
select replace('a b c',' ','') abc from dual

by 윤태웅 [2008.08.07 13:10:39]
저 블로그에 담아놓고 필요할때 바로 보면 안될까요??

by 에스엔 피플 [2008.08.25 18:24:09]
태웅아 넌 안돼..퍼가지마라

by 허브 [2009.01.06 11:24:17]
LTRIM예제 맞습니다.
대문자X에 걸려서 같은문자 찾기가 끝나는듯..
대소문자 구분하는거 같네요

by 김동욱 [2009.07.30 10:20:22]

by DJ메탈짱™ [2009.08.31 16:39:11]
잘보고 갑니다~

by 궁금짱 [2009.12.28 13:26:22]
위에 REPLACE에 대한 예시가 있는데요 그럼 예를 들어서 소괄호 속의 내용이 'JACK & MALL' 일 때 이것을 'BLACK & CALL'로 바꾸려면 어떻게 해야 할까요? 한번에 하나씩만 바꿀 수 있는 건가요??

by 빈이 [2009.12.29 15:43:14]
궁금짱님
replace(replace('JACK & MALL','J','BL'),'M','C')
이렇게 하면대요

by 진 [2012.09.25 12:01:39]

호오~ 잘보고 갑니다~

by 정존 [2013.07.09 15:46:25]
잘 보고 갑니다.^^

by easy [2016.08.04 16:00:29]

CONCAT(char1, char2)

CONCAT 함수는 Concatenation의 약자로 두 문자를 결합하는 역할을 한며, "||" 연산자와 같은 역할을 한다.

1
2
3
4
5
6
-- CONCAT 예제
SELECT CONCAT('www.', 'oracleclub')||'.com' name FROM DUAL;
 
NAME
------------------
www.gurubee.net
 
 
결과가 www.oracleclub.com이 됩니다. 오타 같네요.

by 빈준형 [2018.12.08 18:03:17]

좋은 강좌 감사합니다. 질문이 있는데..

SELECT LTRIM('oracleclub','oracle') name FROM DUAL

구문에서 결과가 ub인 이유를 알고싶어요. 처음 봤을 땐 결과가 club이 나올 것이라 생각했는데 그렇지 않았습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입