본문 바로가기

SQL/SQL 예제

[SQL] Part2 문자열

반응형

- 초보자를 위한 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