본문 바로가기
데이터베이스

2. 문자함수(substr, instr, replace ....)

by 김마리님 2020. 3. 19.

데이터베이스는 문자열로 된 데이터가 많다. 그렇기 때문에 문자열로 만든 데이터에 대한 문자 함수가 존재한다.

 

 

1. substr

substr은 원하는 크기만큼, 원하는 위치에 문자열을 잘라주는 함수이다.

substr의 생김새는 다음과 같다.

 

substr(컬럼 이름 or 문자열, 잘라낼 시작 위치, 잘라낼 문자의 양)

 

잘라낼 문자의 양이 양수이면 오른쪽으로, 음수면 왼쪽으로 자르게 된다.

여기서 주의할 점은, 다른 언어는 가장 왼쪽을 0부터 시작하지만, 오라클은 1부터 시작한다.

예를 들어보자.

SELECT SUBSTR(ENAME,1,1),ENAME
FROM EMP
WHERE SUBSTR(ENAME,1,1)='M';

다음과 같이 첫번째 단어부터, 한 글자를 잘라내니 맨 처음 글자만 남게 된다.

 

다른 예시도 보자.

SELECT BITTHDAY,SUBSTR(BIRTHDAY,4,2),NAME
FROM STUDENT
WHERE SUBSTR(BIRTHDAY,4,2)='02';

4번부터 시작해서 두번째 글자를 끊어서 생일을 도출해낼 수 있다.

 

 

 

2. instr

instr은 원하는 문자를, 원하는 위치부터 시작해서 문자가 있는 위치를 도출해주는 함수이다.

 

instr(문자열 or 컬럼, 찾는 글자, 시작 위치, 몇번째인지)

 

시작위치를 기술하지 않으면 문자열의 맨 처음부터 찾는다. 또한 몇번째 글자를 찾는지 기술하지 않으면 왼쪽부터 시작해서 문자열이 나타난 맨 첫번째 자리를 리턴한다.

예시를 보자.

SELECT INSTR(TEL,'-') - INSTR(TEL,')')-1
FROM STUDENT;

SELECT INSTR(TEL,')'),INSTR(TEL,'-')
FROM STUDENT;

)의 위치가 왼쪽에서 네번째 글자인 것을 알 수 있다. 또한, '-' 역시 8번째에 있는 것을 확인할 수 있다.

이를 응용하면 아무리 앞 뒤 글자가 달라 위치가 변해도 중간값만 출력할 수 있음을 확인할 수 있다.

SELECT TEL, SUBSTR(
    TEL,(INSTR(TEL,')'))+1,INSTR(TEL,'-') - INSTR(TEL,')')-1), INSTR(TEL,')'
    )
FROM STUDENT;

 

보다시피 앞이 두글자던, 중간값이 달라져서 뒤의 '-' 위치가 변하던 상관없이, '-'과 ')'의 위치에 따라 값이 출력된걸 확인할 수 있다.

 

 

3. replace

replace는 문자열을 다른 문자로 변한해주는 함수이다.

 

replace(문자열 or 컬럼명, '문자1', '문자2')

 

예를 들어보자.

SELECT REPLACE(JUMIN,SUBSTR(JUMIN,8,13),'******')
FROM STUDENT;

8열부터 13열까지의 값이 지정한 '******'으로 변한 것을 볼 수 있다.

 

 

 

4. initcap

initcap(배열명 or 문자열)

이 함수는 문자가 가지고 있는 값을 앞 글자만 대문자로, 나머지는 소문자로 바꾼다(=파스칼 표기법).

SELECT ENAME, INITCAP(ENAME)
FROM EMP;

 

 

5. upper

upper(배열명 or 문자열)

이 함수는 문자가 가지고 있는 모든 영어글씨를 대문자로 변경한다.

SELECT TEXT,UPPER(TEXT)
FROM REG_TEST;

 

 

6. lower

lower(배열명 or 문자열)

이 함수는 문자가 가지고 있는 모든 영어글씨를 소문자로 변경한다.

SELECT TEXT,LOWER(TEXT)
FROM REG_TEST;

 

 

7. length

length(배열명 or 문자열)

이 함수는 문자열이 가진 길이를 리턴한다.

SELECT ENAME, LENGTH(ENAME)
FROM EMP;

 

 

8. lpad

lpad(문자열 or 배열명, 총 자릿수, 채워넣을 문자열)

이 함수는 문자열의 왼쪽에 총 자릿수만큼 해당 문자를 채워넣는 함수이다.

SELECT ENAME, LPAD(
    ENAME,9,'123456789'
)
FROM EMP
WHERE DEPTNO=10;

다음과 같이 문자열의 앞에, 총 자릿수만큼(9) 해당문자열을 집어넣는 것을 볼 수 있다.

 

 

9. rpad

rpad(문자열 or 배열명, 총 자릿수, 채워넣을 문자열)

lpad와 마찬가지로 rpad 역시 문자열의 오른쪽에 총 자릿수만큼 해당 문자를 채워넣는 함수이다.

SELECT JUMIN,RPAD(SUBSTR(JUMIN,1,7),13,'*')
FROM STUDENT;

다음과 같이 8자리 이후부터는 다 *과 같이 처리된 것을 확인할 수 있다.

반응형