📌 단일행 함수와 복수행 함수의 차이
✅ 복수행 함수
여러 개의 입력행수 -> 하나의 결과
Group 함수
✅ 단일행 함수
1개의 입력행수 -> 하나의 결과
- 문자 함수
- 숫자 함수
- 날짜 함수
- 형변환 함수
- 일반 함수
- 정규식 함수
📌 문자 함수
✅ INITCAP
✅ LOWER
✅ UPPER
✅ LENGTH
SELECT ename, job, LENGTH(job) "직무명의 길이", LENGTHB(job) "바이트 수"
FROM emp;
LENGTHB
: 문자열 길이의 바이트 값 출력
⚠️
한글은 한 글자를 3byte로 쪼갬
LENGTH('홍길동') -> 3
LENGTHB('홍길동') -> 6
✅ CONCAT
- 두 문자열을 결합해 출력( || 연산자와 동일 )
A || B || C
= CONCAT(CONCAT(A, B), C)
SELECT ename, job, LENGTH(job) "직무명의 길이", LENGTHB(job) "바이트 수"
FROM emp;

⭐ SUBSTR
- 주어진 문자에서 특정 문자만 추출
- SUBSTR('문자열' or 컬럼, '찾는 글자', 시작 위치, 시작 위치에서 추출할 문자까지의 위치)
[학생 테이블에서 남자만 찾기]
SELECT *
FROM stu
WHERE SUBSTR(jumin, 8, 1) = '1';
[🔎] 위치가 '-2'라면 오른쪽 자릿수부터 계산하여 추출함
SELECT profno, CONCAT(CONCAT(name,'-'), position) "이름및직급"
FROM professor;
⚠️ 뒤에 공백이 있을 수도 있으니 제거 후 출력하는 것이 좋다.
SELECT ename, INITCAP(SUBSTR(ename,1,3))
FROM emp
WHERE LENGTH(rtrim(ename,' '))>=6;
✅ INSTR
- 주어진 문자에서 특정 문자의 위치 추출
- 형식: INSTR('문자열' or 컬럼, '찾는 글자', 시작 위치, 몇 번째인지)
SELECT 'A-B-C-D', INSTR('A-B-C-D', '-', 1, 3)
FROM dual;
[위의 표 참고]
➡️ '-' 문자열을 처음 위치에서부터 찾는다. 3번째 나타나는 '-' 위치를 추출한다. 결과 값은 6이다.
[🔎] INSTR('A-B-C-D', '-', -1, 3)
위의 식일 때 결과 값은 2이다.
(-1의 위치는 오른쪽 자릿수부터 계산하기 때문임)
✅ LPAD
- 주어진 문자열에서 왼쪽으로 특정 문자 채움
- 형식: LPAD('문자열' or 컬럼, 자릿수, '채울 문자')
✅ RPAD
- 주어진 문자열에서 오른쪽으로 특정 문자 채움
- RPAD('문자열' or 컬럼, 자릿수, '채울 문자')
✅ LTRIM
- 주어진 문자열에서 왼쪽의 특정 문자 삭제
- LTRIM('문자열' or 컬럼, '제거할 문자')
✅ RTRIM
- 주어진 문자열에서 오른쪽의 특정 문자 삭제
- RTRIM('문자열' or 컬럼, '제거할 문자')
✅ REPLACE
- 주어진 문자열에서 A를 B로 치환
- REPLACE('문자열' or 컬럼, '문자1', '문자2')
📌 숫자 함수
✅ ROUND
- 주어진 숫자를 반올림 후 출력
- 형식: ROUND(숫자, 출력을 원하는 자릿수)
Q. 반올림하여 소수점 둘째자리까지 나타내라.
ROUND(987.657, 2)
🔎 결과 값: 987.66
✅ TRUNC
- 주어진 숫자를 버림 후 출력
- TRUNC(숫자, 원하는 자릿수)
Q. 소수점 둘째자리까지 나타내라.
TRUNC(987.657, 2)
🔎 결과 값: 987.65
✅ MOD
- 주어진 숫자를 나눈 후 나머지 값 출력
- MOD(숫자, 나눌 수)
MOD(123, 10)
🔎 결과 값: 3
✅ CEIL
- 주어진 숫자와 근접한 큰 정수 출력(올림)
- CEIL(숫자)
CEIL(123.45)
🔎 결과 값: 124
✅ FLOOR
- 주어진 숫자와 근접한 작은 정수 출력(내림)
- FLOOR(숫자)
FLOOR(123.45)
🔎 결과 값: 123 (TRUNC와 유사함)
✅ POWER
- 주어진 숫자 1의 숫자 2승을 출력
- POWER(숫자1, 숫자2)
POWER(2, 3)
🔎 결과 값: 8
📌 날짜 함수
✅ SYSDATE
- 시스템의 현재 날짜와 시간
- SELECT SYSDATE FROM ...;
✅ MONTHS_BETWEEN
- 두 날짜 사이의 개월 수
- MONTHS_BETWEEN('날짜', '날짜')
✅ ADD_MONTHS
- 주어진 날짜에 개월을 더함
- ADD_MONTHS('날짜', 더할 숫자 및 날짜)
✅ NEXT_DAY
- 주어진 날짜를 기준으로 돌아오는 날짜 출력
- NEXT_DAY('날짜', '돌아올 요일')
✅ LAST_DAY
- 주어진 날짜가 속한 달의 마지막 날짜 출력
- LAST_DAY('날짜')
✅ ROUND
✅ TRUNC
📌 형변환 함수
✅ TO_CHAR
- 주어진 날짜가 속한 달의 마지막 날짜 출력
- TO_CHAR('원래날짜', '원하는 모양')
종류 | 의미 | 예시 | 결과 |
---|
9 | 9의 개수만큼 자리수 | TO_CHAR(1234, '99999') | 1234 |
0 | 빈자리를 0으로 채움 | TO_CHAR(1234, '099999') | 001234 |
$ | $ 표시를 붙여서 표시 | TO_CHAR(1234, '$9999') | $1234 |
. | 소수점 이하를 표시 | TO_CHAR(1234, '9999.99') | 1234.00 |
, | 단위 구분 기호 표시 | TO_CHAR(12345, '99,999') | 12,345 |
✅ TO_NUMBER
- 숫자가 아닌 숫자처럼 생긴 문자를 숫자로 바꾸어줌
- TO_NUMBER('숫자처럼 생긴 문자')
⭐ TO_DATE
- 문자로 되어 있는 날짜를 날짜 형식으로 바꿔줌
- TO_DATE('문자')
📌 일반 함수
✅ NVL
- NULL 값을 만나면 다른 값으로 치환해서 출력
- NVL(컬럼, 치환할 값)
NVL(sal, 0)
: sal 컬럼 값이 null일 경우 null 대신 0으로 치환한다.
NVL(position, '사원')
: position 컬럼 값이 null일 경우 null 대신 '사원'으로 치환한다.
✅ NVL2
- 컬럼1의 값이 NULL이 아니면 컬럼2를, NULL이면 컬럼3을 출력
- NVL2(컬럼1, 컬럼2, 컬럼3)
⭐ DECODE
- DECODE(A, B, '1', '2'): A가 B일 경우 '1' 출력, 아닐 경우 '2' 출력
- DECODE(A, B, '1', C, '2', '3'): A가 B일 경우 '1' 출력, A가 C일 경우 '2' 출력, 둘 다 아닐 경우 '3' 출력
- DECODE(A, B, DECODE(C, D, '1', '2')): A가 B일 경우 중 C가 D를 만족하면 '1' 출력, C가 D가 아닐 경우 '2' 출력
- DECODE(A, B, DECODE(C, D, '1', '2'), '3'): A가 B일 경우 중 C가 D를 만족하면 '1' 출력, C가 D가 아닐 경우 '2' 출력, A가 B가 아닐 경우 '3' 출력
✅ CASE
- CASE 조건 WHEN 결과1 THEN 출력1
[WHEN 결과2 THEN 출력2]
ELSE 출력3
END "컬럼명"
CASE 지역번호 WHEN '02', 서울
WHEN '031', 경기
=> CASE WHEN 지역번호 = '02' THEN 서울
WHEN 지역번호 = '031' THEN 경기