함수
- 자주 사용되는 기능을 미리 만들어 놓고 필요할 때마다 사용하는 개념
- DBMS에서는 주로 사용되는 문자, 숫자, 날짜 등의 다양한 기능과 데이터 타입을 변환하는 함수들을 제공
타입 | 데이터 타입 | 설명 |
문자 | CHAR(n) | n 크기의 고정 길이 문자 형식 저장 (최대 2,000byte) |
문자 | VARCHAR2(n) | n 크기의 가변 길이 문자 형식 저장 (최대 4,000byte) |
숫자 | NUMBER(p, s) | 숫자 형식 저장(p: 정수 자리수, s: 소수 자리수) |
날짜 | DATE | 날짜 형식 저장 (9999년 12월 31일까지 저장 가능) |
- 단일행 함수 (Single Row Function)
- 데이터 값 계산 및 조작
- 행별로 하나의 결과를 반환
- SELECT, WHERE, ORDER BY 절에서 사용
- 중첩 함수로 사용 가능 (가장 안쪽 단계에서 바깥쪽 단계순으로 진행)
- 문자, 숫자, 날짜, 변환, 일반 함수 등이 존재
- 다중행 함수 (Multi Row Function)
- 그룹 함수, 집계 함수
- 행의 그룹 계산 및 요약
- 여러 행이 입력되고, 결과는 하나의 행씩 반환
- GROUP BY, HAVING 절 사용
문자 함수
- 문자 함수는 주로 데이터 조작에 사용되며 문자와 문자열은 작은 따옴표로( ' )로 묶어서 표현
- 문자 함수의 종류
함수 | 설명 | 예 | 결과 |
LOWER() | 소문자로 변환 | LOWER('TEST') | test |
UPPER() | 대문자로 변환 | UPPER('test') | TEST |
INITCAP() | 첫 문자만 대문자로 변환 | INITCAP('test') | Test |
SUBSTR() | 일부 문자열만 추출 | SUBSTR('Test', 1, 2) | Te |
REPLACE() | 특정 문자열을 찾아 바꾸기 | REPLACE('Test', 'e', 'a') | Tast |
CONCAT() | 두 문자열 연결 | CONCAT('TEST', 'Show') | Test Show |
LENGTH() | 문자열 길이 | LENGTH('Test') | 4 |
INSTR() | 문자열위치 | INSTR('Test', 'e') | 2 |
LPAD() | 왼쪽부터 특정 문자로 채움 | LPAD('Test', 7, '*') | ***Test |
RPAD() | 오른쪽부터 특정 문자로 채움 | RPAD('Test', 7, '*') | Test*** |
LTRIM() | 왼쪽 특정 문자를 지움 | LTRIM('Test', 'Te') | st |
RTRIM() | 오른쪽 특정 문자를 지움 | RTRIM('Test', 'st') | Te |
- LOWER(), UPPER(), INITCAP()
(소문자, 대문자, 첫문자만 대문자 변환)
SELECT
first_name,
LOWER(first_name),
UPPER(first_name),
INITCAP(first_name)
FROM employees;
- SUBSTR()
(일부 문자열만 추출, sub-string)
SELECT
job_id,
SUBSTR(job_id, 1, 2),
SUBSTR(job_id, 4)
FROM employees;
- REPLACE()
(특정 문자열 찾아 바꾸기)
SELECT job_id, REPLACE(job_id, 'MGR', 'MANAGER')
FROM employees;
SELECT job_id, REPLACE(job_id, 'PROG', 'PROGRAMMER')
FROM employees;
- CONCAT()
(두 문자열 연결)
SELECT CONCAT(first_name, CONCAT(' ', last_name))
FROM employees;
- LENGTH()
(문자열 길이 반환)
SELECT first_name, LENGTH(first_name)
FROM employees;
- INSTR()
(특정 문자열 위치 반환, in-string)
SELECT first_name, INSTR(first_name, 'a')
FROM employees;
- LPAD(), RPAD()
(지정 방향부터 특정 문자를 채움 Padding)
SELECT LPAD(first_name, 10, '*'), RPAD(first_name, 10, '*')
FROM employees;
- LTRIM(), RTRIM()
(특정 문자를 지움, trim: 다듬다, 손질하다, 잘라내다)
SELECT job_id, LTRIM(job_id, 'A'), RTRIM(job_id, 'T')
FROM employees;
- TRIM()
(문자열의 공백(space)을 제거하는데 사용하는 함수)
SELECT TRIM(' TEST '), TRIM(' Te st')
FROM dual;
- DUAL 테이블
하나의 열 DUMMY과 하나의 값 'X'를 가지고 있는 테이블로 특정 테이블을 참조하지 않고
출력할 때 사용
SELECT *
FROM dual;
[실습] 문자 함수
- jobs 테이블에서 job_title과 소문자와 대문자로 변환한 job_title을 조회
SELECT job_title, LOWER(job_title), UPPER(job_title)
FROM jobs;
- employees 테이블에서 first_name 첫 1문자와 last_name 조회
SELECT SUBSTR(first_name, 1, 1), last_name
FROM employees;
- employees 테이블에서 job_id가 'REP'인 부분을 'REPRESENTATIVE'로 바꿔서 조회
SELECT REPLACE(job_id, 'REP', 'REPRESENTATIVE')
FROM employees;
- employees 테이블에서 first_name 첫 1 문자와 last_name을 중간에 공백을 두고 하나로 결합하여 조회
SELECT CONCAT(SUBSTR(first_name, 1, 1), CONCAT(' ', last_name))
FROM employees;
- employees 테이블에서 first_name과 last_name의 길이를 합쳐서 조회
SELECT LENGTH(first_name) + LENGTH(last_name)
FROM employees;
- employees 테이블에서 job_id와 job_id에 'A' 문자 위치 조회
SELECT job_id, INSTR(job_id, 'A')
FROM employees;
- locations 테이블의 city를 15자리 문자열로 바꾸고, 빈 공간을 ' . ' 으로 표현하여 조회
SELECT LPAD(city, 15, '.'), RPAD(city, 15, '.')
FROM locations;
- locations 테이블에서 city의 왼쪽부터 'S' 문자를 지운 것과 오른쪽부터 'e' 문자를 지운 결과를 조회
SELECT city, LTRIM(city, 'S'), RTRIM(city, 'e')
FROM locations;
'Language > RDBMS' 카테고리의 다른 글
[DML_SELECT] Multi-Row Function (0) | 2023.03.03 |
---|---|
[DML_SELECT] SQL 함수(숫자, 날짜, 변환, 일반) (0) | 2023.03.03 |
[DML_SELECT] SQL 연산자 (0) | 2023.03.02 |
[DML_SELECT] ORDER BY 구문을 활용한 정렬 (0) | 2023.03.02 |
[DML_SELECT] WHERE 구문을 활용한 비교, 논리 연산 (0) | 2023.03.02 |