안녕하세요! 😄 SQLD(SQL 개발자 자격증) 시험을 준비하면서 꼭 알아야 하는 SQL 함수들을 정리해보았습니다.
SQL 함수는 실제 시험에서 직접 사용 예시나 결과값을 묻는 문제가 자주 나오기 때문에, 정리하고 외우고 실습까지 해야 합니다. SQL 함수들을 체계적으로 정리하도록 하겠습니다 :)
📌 SQL 함수란?
SQL 함수는 입력값을 받아서 계산된 값을 반환하는 기능입니다.
크게 아래 두 가지로 나뉘어요
✅ 단일 행 함수 |
한 행마다 1개의 결과를 반환 (문자, 숫자, 날짜 등) |
✅ 그룹 함수 |
여러 행을 묶어 하나의 결과를 반환 (SUM, COUNT 등) |
🟦 문자열 함수 (Character Function)
문자열 함수는 텍스트 데이터를 다룰 때 사용하는 함수입니다.
✅ LOWER(string)
문자열을 모두 소문자로 변환합니다.
SELECT LOWER('SQLD Exam') FROM DUAL;
-- 결과: 'sqld exam'
- 대소문자 민감한 조건 비교 전에 LOWER() 또는 UPPER()로 통일해서 비교하는 데 유용합니다.
✅ UPPER(string)
문자열을 모두 대문자로 변환합니다.
SELECT UPPER('sql developer') FROM DUAL;
-- 결과: 'SQL DEVELOPER'
✅ LENGTH(string)
문자열의 길이(문자 수)를 반환합니다.
SELECT LENGTH('오라클') FROM DUAL;
-- 결과: 3 (한글도 1자씩 계산됨)
✅ SUBSTR(string, start, length)
문자열의 특정 위치에서 시작하여 일정 길이만큼 잘라냅니다.
SELECT SUBSTR('ORACLEDB', 2, 4) FROM DUAL;
-- 결과: 'RACL'
- start는 1부터 시작, 음수일 경우 뒤에서부터 시작합니다.
- length는 생략하면 끝까지 추출됩니다.
✅ INSTR(string, substring)
특정 문자열이 처음 등장하는 위치를 반환합니다.
SELECT INSTR('DATABASE', 'A') FROM DUAL;
-- 결과: 2 (맨 앞에서부터 찾음)
✅ TRIM(['char' FROM] string)
문자열 앞뒤의 특정 문자를 제거합니다. 기본은 공백 제거.
SELECT TRIM(' Hello ') FROM DUAL;
-- 결과: 'Hello'
SELECT TRIM('0' FROM '000123000') FROM DUAL;
-- 결과: '123'
✅ LPAD(string, total_length, pad_char)
문자열 왼쪽에 특정 문자를 채워 길이를 맞춥니다.
SELECT LPAD('123', 5, '0') FROM DUAL;
-- 결과: '00123'
✅ RPAD(string, total_length, pad_char)
문자열 오른쪽에 문자를 채워 길이를 맞춥니다.
SELECT RPAD('A', 4, '*') FROM DUAL;
-- 결과: 'A***'
✅ REPLACE(string, old, new)
문자열에서 특정 문자 또는 단어를 다른 것으로 바꿉니다.
SELECT REPLACE('abcabc', 'a', 'X') FROM DUAL;
-- 결과: 'XbcXbc'
🟨 숫자 함수 (Number/Math Functions)
숫자 데이터를 다룰 때 사용되는 함수입니다.
✅ ABS(n)
절댓값을 반환합니다.
SELECT ABS(-10) FROM DUAL;
-- 결과: 10
✅ CEIL(n)
소수점이 존재하면 올림합니다.
SELECT CEIL(3.01) FROM DUAL;
-- 결과: 4
✅ FLOOR(n)
소수점이 존재하면 **버림(내림)**합니다.
SELECT FLOOR(3.99) FROM DUAL;
-- 결과: 3
✅ ROUND(n, d)
지정한 소수점 자릿수까지 반올림합니다.
SELECT ROUND(123.4567, 2) FROM DUAL;
-- 결과: 123.46
✅ TRUNC(n, d)
지정한 자릿수까지 버림합니다.
SELECT TRUNC(123.4567, 2) FROM DUAL;
-- 결과: 123.45
✅ MOD(m, n)
m을 n으로 나눈 나머지를 반환합니다.
SELECT MOD(10, 3) FROM DUAL;
-- 결과: 1
✅ POWER(x, y)
x의 y제곱을 반환합니다.
SELECT POWER(2, 3) FROM DUAL;
-- 결과: 8
🟩 날짜 함수 (Date Functions)
날짜와 시간 관련 데이터를 처리하는 데 사용하는 함수입니다.
✅ SYSDATE
현재 시스템의 날짜와 시간 반환
SELECT SYSDATE FROM DUAL;
✅ ADD_MONTHS(date, n)
지정한 날짜에 n개월을 더한 날짜 반환
SELECT ADD_MONTHS(SYSDATE, 3) FROM DUAL;
✅ MONTHS_BETWEEN(d1, d2)
두 날짜 간의 개월 수 차이 계산
SELECT MONTHS_BETWEEN('2025-05-01', '2025-01-01') FROM DUAL;
-- 결과: 4
✅ LAST_DAY(date)
해당 월의 마지막 날짜 반환
SELECT LAST_DAY(SYSDATE) FROM DUAL;
✅ NEXT_DAY(date, '요일')
해당 요일의 다음 날짜 반환
SELECT NEXT_DAY(SYSDATE, 'MONDAY') FROM DUAL;
✅ TRUNC(date, 'fmt')
날짜의 특정 단위를 기준으로 자름
SELECT TRUNC(SYSDATE, 'MM') FROM DUAL;
-- 결과: 이번달 1일
🟪 변환 함수 (Conversion Functions)
데이터 타입을 서로 변환할 수 있는 함수입니다.
✅ TO_CHAR(date/number, 'format')
날짜 또는 숫자를 문자로 변환
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
✅ TO_DATE(string, 'format')
문자열을 날짜로 변환
SELECT TO_DATE('2025-01-01', 'YYYY-MM-DD') FROM DUAL;
✅ TO_NUMBER(string)
문자열을 숫자로 변환
SELECT TO_NUMBER('1000') + 500 FROM DUAL;
-- 결과: 1500
✅ CAST(expression AS TYPE)
표현식을 원하는 타입으로 변환
SELECT CAST('123' AS NUMBER) + 10 FROM DUAL;
-- 결과: 133
🟥 조건 함수
✅ DECODE(column, value1, result1, value2, result2, ..., default)
일종의 IF문처럼 작동하며, 조건값과 비교해 결과 반환
SELECT DECODE(GENDER, 'M', '남자', 'F', '여자', '기타') FROM USERS;
✅ CASE WHEN THEN ELSE END
보다 유연한 조건 분기 처리가 가능한 함수
SELECT
CASE
WHEN SCORE >= 90 THEN 'A'
WHEN SCORE >= 80 THEN 'B'
ELSE 'F'
END AS GRADE
FROM STUDENT;
🟧 그룹 함수 (집계 함수)
여러 행을 집계하여 하나의 결과를 만듭니다. GROUP BY, HAVING절과 함께 자주 쓰임.
SUM() |
총합 계산 |
AVG() |
평균 계산 |
COUNT() |
행 수 계산 |
MAX() |
최댓값 |
MIN() |
최솟값 |
SELECT DEPT_ID, COUNT(*) AS 인원수
FROM EMPLOYEES
GROUP BY DEPT_ID;
🟧 정리
함수 종류 |
함수명 |
설명 |
예시 |
문자열 |
LOWER(str) |
소문자로 변환 |
LOWER('ABC') → 'abc' |
문자열 |
UPPER(str) |
대문자로 변환 |
UPPER('abc') → 'ABC' |
문자열 |
LENGTH(str) |
문자열 길이 |
LENGTH('SQLD') → 4 |
문자열 |
SUBSTR(str, m, n) |
문자 추출 |
SUBSTR('ORACLE', 2, 3) → 'RAC' |
문자열 |
INSTR(str, find) |
문자 위치 |
INSTR('ORACLE', 'A') → 3 |
문자열 |
TRIM(char FROM str) |
앞뒤 문자 제거 |
TRIM('0' FROM '00100') → '1' |
문자열 |
LPAD(str, n, pad) |
왼쪽 채움 |
LPAD('12', 5, '0') → '00012' |
문자열 |
RPAD(str, n, pad) |
오른쪽 채움 |
RPAD('A', 3, '-') → 'A--' |
문자열 |
REPLACE(str, a, b) |
문자열 치환 |
REPLACE('AABB', 'B', 'C') → 'AACC' |
숫자 |
ABS(n) |
절댓값 |
ABS(-3) → 3 |
숫자 |
CEIL(n) |
올림 |
CEIL(2.1) → 3 |
숫자 |
FLOOR(n) |
내림 |
FLOOR(2.9) → 2 |
숫자 |
ROUND(n, d) |
반올림 |
ROUND(3.456, 2) → 3.46 |
숫자 |
TRUNC(n, d) |
버림 |
TRUNC(3.456, 2) → 3.45 |
숫자 |
MOD(m, n) |
나머지 |
MOD(10, 3) → 1 |
숫자 |
POWER(x, y) |
제곱 |
POWER(2, 3) → 8 |
날짜 |
SYSDATE |
현재 날짜 |
SYSDATE |
날짜 |
ADD_MONTHS(d, n) |
n개월 후 |
ADD_MONTHS(SYSDATE, 1) |
날짜 |
MONTHS_BETWEEN(d1, d2) |
개월 차이 |
MONTHS_BETWEEN('2025-05-01', '2025-01-01') |
날짜 |
LAST_DAY(date) |
월 말일 |
LAST_DAY(SYSDATE) |
날짜 |
NEXT_DAY(date, 요일) |
다음 요일 |
NEXT_DAY(SYSDATE, 'MONDAY') |
날짜 |
TRUNC(date, fmt) |
날짜 자르기 |
TRUNC(SYSDATE, 'MM') |
변환 |
TO_CHAR(date, fmt) |
날짜 → 문자 |
TO_CHAR(SYSDATE, 'YYYY-MM-DD') |
변환 |
TO_DATE(str, fmt) |
문자 → 날짜 |
TO_DATE('2025-01-01', 'YYYY-MM-DD') |
변환 |
TO_NUMBER(str) |
문자 → 숫자 |
TO_NUMBER('100') |
변환 |
CAST(expr AS type) |
형 변환 |
CAST('123' AS NUMBER) |
조건 |
DECODE(col, val, res) |
조건 분기 |
DECODE(GENDER, 'M', '남') |
조건 |
CASE WHEN THEN |
조건 분기 |
CASE WHEN 점수 ≥ 90 THEN 'A' |
집계 |
SUM(expr) |
합계 |
SUM(SALARY) |
집계 |
AVG(expr) |
평균 |
AVG(SALARY) |
집계 |
MAX(expr) |
최댓값 |
MAX(HIRE_DATE) |
집계 |
MIN(expr) |
최솟값 |
MIN(SALARY) |
집계 |
COUNT(*) |
행 수 |
COUNT(*) |