2과목 · SQL 기본 및 활용·7장
단일행 함수
문자·숫자·날짜·변환·일반 함수와 NULL 처리 함수까지 단일행 함수 전반을 정리합니다.
노란 밑줄 은 시험에 자주 나오는 지점✎ 는 덧붙인 필기
1. 단일행 함수란
행 하나당 하나의 결과를 반환하는 함수. SELECT, WHERE, ORDER BY 어디에서도 사용 가능. 집계 함수(여러 행 → 하나)와는 다릅니다.
2. 문자 함수
| 함수 | 설명 | 예 |
|---|---|---|
LENGTH(s) |
길이 | LENGTH('abc') → 3 |
UPPER / LOWER |
대/소문자 변환 | UPPER('abc') → 'ABC' |
SUBSTR(s, start, len) |
부분 문자열(시작 위치는 1부터) | SUBSTR('abcdef', 2, 3) → 'bcd' |
CONCAT / ` |
` | |
LPAD / RPAD |
좌/우 패딩 | LPAD('7', 3, '0') → '007' |
TRIM |
양쪽 공백 제거 | TRIM(' abc ') → 'abc' |
REPLACE |
치환 | REPLACE('a-b', '-', '_') → 'a_b' |
INSTR |
문자 위치 | INSTR('abc', 'b') → 2 |
3. 숫자 함수
| 함수 | 설명 |
|---|---|
ABS(n) |
절대값 |
ROUND(n, d) |
반올림 |
TRUNC(n, d) |
버림 |
CEIL(n) / FLOOR(n) |
올림/내림 |
MOD(a, b) |
나머지 |
POWER(a, b) |
거듭제곱 |
SIGN(n) |
부호(-1/0/1) |
SELECT ROUND(123.456, 2) FROM dual; -- 123.46
SELECT TRUNC(123.456, 2) FROM dual; -- 123.45
SELECT MOD(10, 3) FROM dual; -- 1
4. 날짜 함수
| 함수 | 설명 |
|---|---|
SYSDATE / CURRENT_DATE |
현재 날짜 |
SYSTIMESTAMP / CURRENT_TIMESTAMP |
현재 시각 |
ADD_MONTHS(d, n) |
n개월 가감 |
MONTHS_BETWEEN(d1, d2) |
월 단위 차 |
LAST_DAY(d) |
해당 월의 마지막 날 |
NEXT_DAY(d, '월요일') |
가장 가까운 지정 요일 |
EXTRACT(YEAR FROM d) |
연/월/일 추출 |
날짜 연산
날짜 + 숫자= 날짜(일수를 더한다)날짜 - 날짜= 숫자(일수 차)
SELECT SYSDATE + 7 FROM dual; -- 일주일 후
SELECT SYSDATE - DATE '2024-01-01' FROM dual; -- 경과 일수
5. 변환 함수
| 함수 | 설명 |
|---|---|
TO_CHAR |
숫자/날짜 → 문자 |
TO_NUMBER |
문자 → 숫자 |
TO_DATE |
문자 → 날짜 |
CAST |
ANSI 표준 타입 변환 |
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM dual; -- '2026-04-19'
SELECT TO_NUMBER('1,234', '9,999') FROM dual; -- 1234
SELECT TO_DATE('2026-04-19', 'YYYY-MM-DD') FROM dual; -- 날짜
SELECT CAST('123' AS INT) FROM dual; -- 123
함정:
TO_DATE(SYSDATE, 'YYYY')— SYSDATE는 이미 DATE이므로 다시 TO_DATE 하면 오류 또는 암묵 변환 후 의도와 다르게 동작. 문자로 바꾸려면TO_CHAR.
6. 일반 / NULL 처리 함수
| 함수 | 설명 |
|---|---|
NVL(a, b) |
a 가 NULL 이면 b |
NVL2(a, v1, v2) |
a가 NULL이 아니면 v1, 아니면 v2 |
NULLIF(a, b) |
a = b 이면 NULL, 아니면 a |
COALESCE(...) |
여러 인자 중 첫 번째 NOT NULL |
DECODE(a, v1, r1, v2, r2, ..., def) |
조건 분기 (Oracle) |
CASE |
ANSI 표준 조건 분기 |
SELECT
name,
CASE WHEN salary >= 5000000 THEN 'high'
WHEN salary >= 3000000 THEN 'mid'
ELSE 'low'
END AS grade
FROM emp;
7. 자주 출제되는 포인트
- 암묵적 형변환:
WHERE col = '123'에서 col이 NUMBER면 자동 변환. 성능 이슈 유발. TO_DATE에 이미 DATE 타입을 넣으면 오류.ROUNDvsTRUNC: 반올림 / 버림.SUBSTR인덱스는 1-based (Oracle).DECODE는 Oracle 전용,CASE가 ANSI 표준.
8. 요약 체크리스트
- 문자·숫자·날짜·변환·NULL 함수 각 대표 3개씩 쓸 수 있다.
- CASE 문으로 등급을 분기하는 쿼리를 작성할 수 있다.
- SYSDATE 연산의 단위와 TO_DATE의 함정을 안다.
- COALESCE와 NVL의 차이를 설명할 수 있다.