본문 바로가기
Lecture/SQL & Oracle

[SQL 기본만 알아도 할껀 다한다.] 문자 처리 함수 (Character-Manipulation Functions)

by 알 수 없는 사용자 2012. 7. 11.


문자 처리 함수에 대해 알아보겠습니다. (숫자 적용 가능)

문자를 자르고 붙이는 등 다양한 함수를 제공하고, 이 함수들은 중첩해서 사용할 수 있습니다.

오라클에서 문자를 세는 방법을 먼저 알아야합니다.


1 

2 

3 

4 

5 

6 

7 

8 

9 

10 

 H

e 

l 

l 

o 

W 

o 

r 

l 

d 

사람이 숫자 세는 기준과 똑같습니다.

맨 첫문자를 1로 놓고 세어나갑니다.



기능을 먼저 소개하고 예제로 들어갈께요.

 CONCAT('Hello', 'World')

두 문자열을 붙임 

HelloWorld 

 SUBSTR('HelloWorld', 1, 5)

문자열을 선택한 위치만큼 표시함 

Hello 

 LENGTH('HelloWorld')

문자열의 길이 

10 

 INSTR('HelloWorld', 'W')

선택한 문자의 위치 

6 

 TRIM('H' FROM 'HelloWorld')

첫문자나 마지막 문자부터 끝까지 잘라냄

elloWorld 

 REPLACE('HelloWorld', 'H', 'B')

선택한 문자를 변경 

BelloWorld 

 LPAD(salary, 10, '*')

10자리 공간에 우측에 문자를 배치

남은 공간을 * 로 채움

 *****35000

 RPAD(salary, 10, '*')

 10자리 공간에 좌측에 문자를 배치

남은 공간을 * 로 채움

 35000*****




CONCAT 은 2개의 컬럼을 하나의 컬럼 값으로 합치는 역할을 합니다.

3개 이상의 컬럼을 합치려면 CONCAT( CONCAT( ) ) 중첩해서 사용하셔야 합니다.

.. .. .. 이렇게 쓰시는 분.. 사실 거의 없으실겁니다. 우리에겐 ' || ' 이게 있으니까요.

first_name || last_name  이게 편합니다..ㅋ


LENGTH 는 유용하게 쓰실수 있는 함수입니다. 문자열의 자릿수를 세어줍니다.

큰 숫자일 경우 자릿수를 알면 처리하는데 간편하겠죠.ㅋ


INSTR 은 해당 컬럼에서 제시한 문자가 포함되어있다면 그 갯수를 세어줍니다.

두글짜 이상의 문자열로 하셔도 됩니다.



SUBSTR 은 선택한 범위의 문자만 나타내는 겁니다. 잘라버리는거 아닙니다.!

SUBSTR(job_id, 4) 는 4번째 자리부터!! 나타냅니다.

SUBSTR(job_id, 1, 3) 는 첫자리부터 3번째 자리까지 나타냅니다. 


TRIM은 from도 들어가고 .. 문법이 좀 특이합니다.

선택해서 삭제할 문자도 첫자리나 끝자리 둘 중 하나만 가능합니다.

만약 맨앞 맨뒤 문자가 같을 경우 같이 삭제됩니다. 하지만 원치 않을 경우 키워드를 선택해서 쓰시면 됩니다.

TRIM(LEADING 'd' from 'dHelloWorld')

TRIM(TAILING 'd' from 'dHelloWorld')

TRIM 의 다른 쓰임은 또 그때가서.ㅋ


REPLACE 는 선택한 컬럼의 문자를 다른 문자로 대체할 때 사용합니다.

어려울꺼 없네요.ㅋ




LPAD 와 RPAD 는 같은 쓰임새로 사용합니다. 방향만 좀 다를 뿐..

둘다 제시한 10자리 만큼의 문자열 공간을 만들어 놓고,

LPAD 는 왼쪽부터 입력한 대체 문자 * 를 채워넣습니다.

 1

2 

3

4 

5 

6 

 7

8 

 9

10 

 *

* 

* 

* 

* 

1 

3 

0 

0 

0 


RPAD는 값을 먼저 넣고 남은 공간을 입력한 대체 문자를 채워넣습니다.

 1

2 

3 

4 

5 

6 

7 

8 

9 

10 

 4

4 

0 

0 

* 

* 

* 

* 

* 

* 

이번에 다룬 다른 함수들 보다 사용 빈도가 높으니, 알아두시면 좋습니다. ㅋ



언젠가 이런 질문을 받은 적이 있습니다.

''데이터베이스에서 이렇게 함수 사용해가면서 SQL 복잡하게 만들 필요가 있나요??

익숙한 자바에서 데이터 가져올때 처리해도 되잖아요??''

''아...그럼 그렇게 하세요^^''


데이터베이스는 기본적으로 대규모의 데이터를 처리하기 위해 만들어진 시스템입니다.

CONCAT 100만 행을 처리할때,

에어컨 빵빵하게 시원한 서버실에 있는 서버가 빠를까요..

선풍기 하나 돌아가는 내 PC가 빠를까요..


배우는게 귀찮으면, 개발자하시면 안됩니다.ㅋ