반응형
- 초보자를 위한 SQL 200제의 문제를 바탕으로 작성되었습니다.
<문자열 함수 정리>
함수 | 기능 |
UPPER | 대문자로 출력 |
LOWER | 소문자로 출력 |
INITCAP | 첫 번째 철자 대문자 출력 + 나머지 소문자 출력 |
SUBSTR | 문자에서 지정된 길이의 문자열을 추출 |
LENGTH | 문자열의 길이 출력 |
INSTR | 문자에서 특정 철자의 위치를 출력 |
REPLACE | 특정 철자를 다른 철자로 변경 |
LPAD | 왼쪽 PAD 추가 |
RPAD | 오른쪽 PAD 추가 |
TRIM | 문자 출력시 양쪽이 철자를 잘라서 출력 |
RTRIM | 문자 출력시 오른쪽 철자 잘라서 출력 |
LTRIM | 문자 출력시 왼쪽 철자 잘라서 출력 |
[예제16]
1. 사원 테이블의 이름을 출력할 때, 대문자 출력, 소문자 출력, 첫 번째 철자는 대문자로 나머지 철자는 소문자로 출력하기
select upper(ename), lower(ename), initcap(ename)
from emp;
- UPPER: 대문자 출력
- LOWER: 소문자 출력
- INITCAP: 첫 번째 철자는 대문자로 나머지는 소문자로 출력
- UPPER와 LOWER 함수는 테이블 내 특정 문자 데이터를 검색하고자 할 때 데이터가 대문자인지 소문자로 저장되어 있는지 확실하지 않을 때 정확한 데이터 검색을 위해 필요.
[예제17]
1. 영어 단어 SMITH에서 SMI만 잘라서 출력
select substr('SMITH', 1, 3)
from dual;
- SUBSTR: 문자에서 특정 위치의 문자열을 추출하는 기능
- SUBSTR('문자', m, n)
- m: 시작 위치
- n: 시작 위치부터 n개 출력
[예제18]
1. 이름을 출력하고 그 옆의 이름의 철자 개수 출력
select ename, length(ename)
from emp;
[예제19]
1. 사원 이름 SMITH에서 알파벳 철자 M이 몇 번째 자리에 있는지 출력
select instr('SMITH', 'M')
from dual;
2. 이메일에서 naver.com만 추출하고 싶은 경우
select substr('abcdef@naver.com', instr('abcdef@naver.com', '@')+1) as NAVER
from dual;
- SUBSTR('문자', m) : 문자에서 m번째 단에부터 추출
- instr('abcdef@naver.com' , '@')의 결과가 7이므로, +1을 해줘서 m = 8
[예제20]
1. 이름과 월급을 출력하는데, 월급을 출력할 때 숫자 0을 *로 출력
select ename, replace(sal, 0, '*')
from emp;
- REPLACE: 특정 철자를 다른 철자로 변경하는 문자 함수
- REPLACE (col, 변경을 당하는 문자, 변경을 할 문자)
2. 월급의 숫자 0~3까지를 *로 출력
select ename, regexp_replace(sal, '[0-3]', '*') as SALARY
from emp;
- REGEXP_REPLACE 함수는 정규식 함수에 해당
[예제21]
1. 이름과 월급을 출력 시 월급 컬럼의 자릿수는 10자리로 하고, 나머지 자리에 *를 채워서 출력
select ename, lpad(sal, 10, '*') as sal1, rpad(sal, 10, '*') as sal2
from emp;
[예제22]
1. smith에서 s잘라서 출력, h 잘라서 출력
select 'smith', ltrim('smith', 's'), rtrim('smith', 'h')
from dual;
2. smiths에서 양쪽의 s잘라서 출력
select 'smiths', trim('s' from 'smiths')
from dual;
3. 오른쪽 공백이 있는 데이터 검색
#오른쪽 공백이 있는 데이터 생성
insert into emp(empno, ename, sal, job, deptno) values (8291, 'KANG ', 3000, 'SALESMAN', 30);
#이름이 KANG인 사원 조회
select ename, sal
from emp
where ename = 'KANG';
- 공백없이 비교했기 때문에 선택된 레코드가 없음.
- 이럴 때 사용할 수 있는게 RTRIM
select ename,sal
from emp
where rtrim(ename) = 'KANG';
반응형
'SQL > SQL 예제' 카테고리의 다른 글
[SQL] Part2 DECODE, CASE (IF문 ) (0) | 2022.08.09 |
---|---|
[SQL] Part2 NVL, NVL2 (NULL 값 처리) (0) | 2022.08.09 |
[SQL] 암시적 형 변환 (0) | 2022.08.09 |
[SQL] Part2 날짜형 데이터 (0) | 2022.08.08 |
[SQL] 비교연산자 (0) | 2022.08.07 |