2026 SQLD 필기 2과목 1장 3절 | 문자·숫자 함수와 CASE — 핵심 이론
데이터위자드 ·
필기 · 핵심 이론
함수 문제는 입력 값과 반환 자료형을 먼저 적고 한 단계씩 계산하면 됩니다. 문자열에서 몇 번째 문자를 가져오는지, 반올림 자릿수가 소수점 어느 쪽인지, CASE의 어떤 조건이 먼저 만족되는지를 구별합니다.
문자열 길이와 부분 문자열 · ROUND와 TRUNC · CASE의 평가 순서 · 치환 함수와 자료형 · 명시적 형 변환
1. 문자열 길이와 부분 문자열
LENGTH는 문자 수를 구할 때 쓰며 바이트 길이 함수와 구별합니다. Oracle의 SUBSTR은 위치와 길이로 부분 문자열을 자릅니다. SQL Server는 SUBSTRING을 사용합니다. 제품별 함수명과 시작 위치 규칙을 섞지 마세요.
한글의 문자 수와 저장 바이트 수는 같지 않을 수 있습니다. 전화번호의 일부를 자르거나 코드 접두사를 추출할 때는 공백과 NULL 처리도 확인합니다. 예제에서 사용하는 DBMS를 명시하면 함수를 잘못 외우는 일을 줄일 수 있습니다.
Oracle SUBSTR(문자열,시작위치,길이)는 지정한 부분 문자열을 반환한다.
예제로 적용하기
Oracle에서 SUBSTR('ABCDE',2,3)의 결과는?
풀이와 판단 과정
결론: BCD
두 번째 문자 B부터 세 글자이므로 BCD입니다.
2. ROUND와 TRUNC
ROUND는 지정 자리에서 반올림하고 TRUNC는 해당 자리 아래를 잘라냅니다. ROUND(123.456,2)=123.46, TRUNC(123.456,2)=123.45입니다. 음수 자릿수는 소수점 왼쪽 자리입니다.
원본 값이 바뀌는 계산 함수와 화면에 보이는 자릿수만 바꾸는 표시 형식을 구분하세요. DBMS별 지원 함수명이 다르며 음수 값의 절사와 내림도 같지 않을 수 있습니다. TRUNC(-1.8)= -1인 경우 FLOOR(-1.8)= -2와 구분됩니다.
ROUND는 반올림하고 TRUNC는 지정 자리 아래를 버린다.
예제로 적용하기
Oracle에서 ROUND(1234.56,-2)의 결과는?
풀이와 판단 과정
결론: 1200
백의 자리로 반올림하므로 십의 자리 3을 보고 1200이 됩니다.
3. CASE의 평가 순서
검색 CASE는 위에서부터 처음 TRUE인 WHEN의 결과를 반환합니다. 점수>=90을 먼저 확인한 뒤 >=80을 확인해야 등급이 자연스럽습니다. >=80을 먼저 쓰면 95도 그 조건에서 결정되어 A 분기에 도달하지 못합니다.
ELSE가 없고 어떤 조건도 맞지 않으면 NULL입니다. CASE는 조건에 따라 값을 만드는 표현식이므로 SELECT뿐 아니라 ORDER BY나 집계 표현식 안에서도 사용할 수 있습니다. 결과 분기의 자료형도 일관되게 맞추세요.
CASE는 처음으로 TRUE가 되는 WHEN의 결과를 반환한다.
예제로 적용하기
점수 95에 WHEN 점수>=80 THEN B, WHEN 점수>=90 THEN A를 적용하면?
풀이와 판단 과정
결론: B
첫 조건 >=80이 이미 참이므로 B가 반환됩니다. 높은 기준을 먼저 검사해야 합니다.
4. 치환 함수와 자료형
COALESCE는 왼쪽부터 처음 NULL이 아닌 값을 반환합니다. Oracle NVL은 대체 값을 제공하며 SQL Server ISNULL과 지원 방식이 다릅니다. 반환 자료형과 암시적 변환 규칙이 다를 수 있으므로 함수 이름만 바꿔도 모든 경우가 같다고 보지 마세요.
숫자 금액의 대체 값으로 문자열 미입력을 섞으면 변환 오류가 날 수 있습니다. 집계 전에 0으로 치환하는지 집계 결과가 NULL일 때 0으로 치환하는지도 결과 의미가 다릅니다.
COALESCE는 처음으로 NULL이 아닌 인수를 반환한다.
예제로 적용하기
COALESCE(NULL,NULL,0,10)의 결과는?
풀이와 판단 과정
결론: 0
0은 NULL이 아니므로 세 번째 인수에서 반환이 결정됩니다.
5. 명시적 형 변환
명시적 변환은 날짜·숫자·문자 간 변환 의도를 함수로 드러내는 방법입니다. Oracle TO_DATE에는 입력 문자열과 형식 모델을 함께 적습니다. 세션의 기본 날짜 형식에 의존하면 다른 환경에서 오류나 오해가 생길 수 있습니다.
숫자 컬럼을 문자열과 비교할 때 DBMS가 자동 변환해 줄 수 있어도 잘못된 데이터나 실행계획 문제를 만들 수 있습니다. 표시를 위해 날짜를 문자열로 바꾸는 것과 날짜 자체로 범위 비교하는 일을 분리하세요.
날짜 문자열 변환은 형식을 명시하면 환경 의존성을 줄일 수 있다.
예제로 적용하기
Oracle에서 2026-11-07을 날짜로 해석하는 명확한 표현은?
풀이와 판단 과정
결론: TO_DATE('2026-11-07','YYYY-MM-DD')
문자열 형식 YYYY-MM-DD를 지정해 날짜로 변환합니다.
한눈에 비교하기
| 기능 | Oracle 예 | 결과 |
|---|---|---|
| 부분 문자열 | SUBSTR('ABCDE',2,3) | BCD |
| 반올림 | ROUND(123.456,2) | 123.46 |
| 절사 | TRUNC(123.456,2) | 123.45 |
| NULL 대체 | COALESCE(NULL,0,10) | 0 |
순서대로 풀어 보는 예제
상품코드가 AB-2026이고 금액이 12,345.67이라면 코드 앞 두 글자는 AB, 백 원 단위 반올림 금액은 12,300입니다. 할인율이 NULL일 때 0을 적용하려면 금액*(1-COALESCE(할인율,0))처럼 계산합니다.
할인율 0.1은 10%이고 숫자 10은 1,000%를 뜻하므로 단위도 확인해야 합니다. CASE로 무료·할인을 분류할 때는 무료 조건을 먼저 둘지 할인 조건을 먼저 둘지 업무상 우선순위를 정합니다.
SELECT CASE WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
ELSE 'C' END AS grade
FROM scores;헷갈리는 문장 바로잡기
문자열 길이와 부분 문자열
잘못된 판단 문자 수와 바이트 수는 모든 문자셋에서 항상 같다.
올바른 판단: Oracle SUBSTR(문자열,시작위치,길이)는 지정한 부분 문자열을 반환한다.
ROUND와 TRUNC
잘못된 판단 ROUND와 TRUNC는 모든 값에서 같다.
올바른 판단: ROUND는 반올림하고 TRUNC는 지정 자리 아래를 버린다.
CASE의 평가 순서
잘못된 판단 CASE는 마지막으로 참인 WHEN만 선택한다.
올바른 판단: CASE는 처음으로 TRUE가 되는 WHEN의 결과를 반환한다.
치환 함수와 자료형
잘못된 판단 COALESCE는 가장 큰 숫자를 반환한다.
올바른 판단: COALESCE는 처음으로 NULL이 아닌 인수를 반환한다.
명시적 형 변환
잘못된 판단 날짜 문자열은 어떤 환경에서나 자동으로 같은 뜻이다.
올바른 판단: 날짜 문자열 변환은 형식을 명시하면 환경 의존성을 줄일 수 있다.
이론을 정리했다면 같은 절의 객관식 문제에서 조건과 예외를 확인하세요. 정답을 고른 뒤에는 틀린 선택지가 왜 성립하지 않는지도 설명해 보세요.
핵심 개념 확인 — 객관식 5문제
설명을 읽은 뒤 아래 다섯 문항을 풀어 보세요. 정답을 고르고 틀린 선택지의 오류도 설명할 수 있으면 이 단원의 기준을 이해한 것입니다.
문제 1
문자·숫자 함수와 CASE에서 문자열 길이와 부분 문자열에 대한 설명으로 옳은 것은?
- ① Oracle SUBSTR(문자열,시작위치,길이)는 지정한 부분 문자열을 반환한다.
- ② SUBSTR은 원본 값을 영구 삭제한다.
- ③ 문자 함수는 NULL을 자동으로 숫자 0으로 바꾼다.
- ④ 문자 수와 바이트 수는 모든 문자셋에서 항상 같다.
정답과 해설 보기
정답 ①
LENGTH는 문자 수를 구할 때 쓰며 바이트 길이 함수와 구별합니다. Oracle의 SUBSTR은 위치와 길이로 부분 문자열을 자릅니다. SQL Server는 SUBSTRING을 사용합니다. 제품별 함수명과 시작 위치 규칙을 섞지 마세요. 한글의 문자 수와 저장 바이트 수는 같지 않을 수 있습니다. 전화번호의 일부를 자르거나 코드 접두사를 추출할 때는 공백과 NULL 처리도 확인합니다. 예제에서 사용하는 DBMS를 명시하면 함수를 잘못 외우는 일을 줄일 수 있습니다.
Oracle SUBSTR(문자열,시작위치,길이)는 지정한 부분 문자열을 반환한다.
문제 2
문자·숫자 함수와 CASE에서 ROUND와 TRUNC에 대한 설명으로 옳은 것은?
- ① TRUNC(-1.8)은 언제나 FLOOR와 같다.
- ② 음수 자릿수는 무조건 오류다.
- ③ ROUND와 TRUNC는 모든 값에서 같다.
- ④ ROUND는 반올림하고 TRUNC는 지정 자리 아래를 버린다.
정답과 해설 보기
정답 ④
ROUND는 지정 자리에서 반올림하고 TRUNC는 해당 자리 아래를 잘라냅니다. ROUND(123.456,2)=123.46, TRUNC(123.456,2)=123.45입니다. 음수 자릿수는 소수점 왼쪽 자리입니다. 원본 값이 바뀌는 계산 함수와 화면에 보이는 자릿수만 바꾸는 표시 형식을 구분하세요. DBMS별 지원 함수명이 다르며 음수 값의 절사와 내림도 같지 않을 수 있습니다. TRUNC(-1.8)= -1인 경우 FLOOR(-1.8)= -2와 구분됩니다.
ROUND는 반올림하고 TRUNC는 지정 자리 아래를 버린다.
문제 3
문자·숫자 함수와 CASE에서 CASE의 평가 순서에 대한 설명으로 옳은 것은?
- ① CASE는 마지막으로 참인 WHEN만 선택한다.
- ② CASE는 WHERE에서만 사용 가능하다.
- ③ ELSE가 없으면 항상 0이다.
- ④ CASE는 처음으로 TRUE가 되는 WHEN의 결과를 반환한다.
정답과 해설 보기
정답 ④
검색 CASE는 위에서부터 처음 TRUE인 WHEN의 결과를 반환합니다. 점수>=90을 먼저 확인한 뒤 >=80을 확인해야 등급이 자연스럽습니다. >=80을 먼저 쓰면 95도 그 조건에서 결정되어 A 분기에 도달하지 못합니다. ELSE가 없고 어떤 조건도 맞지 않으면 NULL입니다. CASE는 조건에 따라 값을 만드는 표현식이므로 SELECT뿐 아니라 ORDER BY나 집계 표현식 안에서도 사용할 수 있습니다. 결과 분기의 자료형도 일관되게 맞추세요.
CASE는 처음으로 TRUE가 되는 WHEN의 결과를 반환한다.
문제 4
문자·숫자 함수와 CASE에서 치환 함수와 자료형에 대한 설명으로 옳은 것은?
- ① COALESCE는 처음으로 NULL이 아닌 인수를 반환한다.
- ② COALESCE는 가장 큰 숫자를 반환한다.
- ③ NULL과 0은 항상 같은 값이다.
- ④ 모든 NULL 치환 함수는 자료형 규칙까지 동일하다.
정답과 해설 보기
정답 ①
COALESCE는 왼쪽부터 처음 NULL이 아닌 값을 반환합니다. Oracle NVL은 대체 값을 제공하며 SQL Server ISNULL과 지원 방식이 다릅니다. 반환 자료형과 암시적 변환 규칙이 다를 수 있으므로 함수 이름만 바꿔도 모든 경우가 같다고 보지 마세요. 숫자 금액의 대체 값으로 문자열 미입력을 섞으면 변환 오류가 날 수 있습니다. 집계 전에 0으로 치환하는지 집계 결과가 NULL일 때 0으로 치환하는지도 결과 의미가 다릅니다.
COALESCE는 처음으로 NULL이 아닌 인수를 반환한다.
문제 5
문자·숫자 함수와 CASE에서 명시적 형 변환에 대한 설명으로 옳은 것은?
- ① 날짜 문자열은 어떤 환경에서나 자동으로 같은 뜻이다.
- ② 암시적 변환은 오류가 날 수 없다.
- ③ 문자열로 보이는 날짜는 시간값을 가질 수 없다.
- ④ 날짜 문자열 변환은 형식을 명시하면 환경 의존성을 줄일 수 있다.
정답과 해설 보기
정답 ④
명시적 변환은 날짜·숫자·문자 간 변환 의도를 함수로 드러내는 방법입니다. Oracle TO_DATE에는 입력 문자열과 형식 모델을 함께 적습니다. 세션의 기본 날짜 형식에 의존하면 다른 환경에서 오류나 오해가 생길 수 있습니다. 숫자 컬럼을 문자열과 비교할 때 DBMS가 자동 변환해 줄 수 있어도 잘못된 데이터나 실행계획 문제를 만들 수 있습니다. 표시를 위해 날짜를 문자열로 바꾸는 것과 날짜 자체로 범위 비교하는 일을 분리하세요.
날짜 문자열 변환은 형식을 명시하면 환경 의존성을 줄일 수 있다.
범위 확인
2026년 학습 범위를 기준으로 구성했습니다. 시험 시행기관의 자격 안내·출제 기준에서 과목과 변경 공지를 확인할 수 있습니다.
SQLD 전체 목차
과목별 이론
- 1과목 · 1장 1~3절 · 데이터 모델·엔터티·속성
- 1과목 · 1장 4~5절 · 관계·식별자와 카디널리티
- 1과목 · 2장 1~3절 · 정규화·조인·트랜잭션 모델
- 1과목 · 2장 4~5절 · NULL·본질식별자·인조식별자
- 2과목 · 1장 1~2절 · 관계형 DB와 SELECT·DISTINCT
- 2과목 · 1장 3절 · 문자·숫자 함수와 CASE
- 2과목 · 1장 4절 · WHERE·날짜 범위·연산자 우선순위
- 2과목 · 1장 5~6절 · 집계·GROUP BY·HAVING·ORDER BY
- 2과목 · 1장 7~8절 · INNER·OUTER·표준 조인
- 2과목 · 2장 1절 · 서브쿼리·EXISTS·스칼라 서브쿼리
- 2과목 · 2장 2~3절 · 집합 연산·ROLLUP·CUBE·GROUPING
- 2과목 · 2장 4~5절 · 윈도우 함수·순위·Top N
- 2과목 · 2장 6~8절 · 계층형 질의·셀프 조인·PIVOT·정규표현식
- 2과목 · 3장 1~2절 · DML·TCL과 트랜잭션
- 2과목 · 3장 3~4절 · DDL·DCL·제약조건·권한
단원별 객관식
- 1과목 · 1장 1~3절 · 데이터 모델·엔터티·속성
- 1과목 · 1장 4~5절 · 관계·식별자와 카디널리티
- 1과목 · 2장 1~3절 · 정규화·조인·트랜잭션 모델
- 1과목 · 2장 4~5절 · NULL·본질식별자·인조식별자
- 2과목 · 1장 1~2절 · 관계형 DB와 SELECT·DISTINCT
- 2과목 · 1장 3절 · 문자·숫자 함수와 CASE
- 2과목 · 1장 4절 · WHERE·날짜 범위·연산자 우선순위
- 2과목 · 1장 5~6절 · 집계·GROUP BY·HAVING·ORDER BY
- 2과목 · 1장 7~8절 · INNER·OUTER·표준 조인
- 2과목 · 2장 1절 · 서브쿼리·EXISTS·스칼라 서브쿼리
- 2과목 · 2장 2~3절 · 집합 연산·ROLLUP·CUBE·GROUPING
- 2과목 · 2장 4~5절 · 윈도우 함수·순위·Top N
- 2과목 · 2장 6~8절 · 계층형 질의·셀프 조인·PIVOT·정규표현식
- 2과목 · 3장 1~2절 · DML·TCL과 트랜잭션
- 2과목 · 3장 3~4절 · DDL·DCL·제약조건·권한
실습
- SQL 학습 실습 1 · 6작업 · SELECT·조건·정렬
- SQL 학습 실습 2 · 6작업 · NULL·COUNT·평균
- SQL 학습 실습 3 · 6작업 · 날짜 범위·문자 조건
- SQL 학습 실습 4 · 6작업 · GROUP BY·HAVING·조건부 합계
- SQL 학습 실습 5 · 6작업 · 조인·행 수·미주문 고객
- SQL 학습 실습 6 · 6작업 · 서브쿼리·EXISTS·NOT EXISTS
- SQL 학습 실습 7 · 6작업 · 순위·동률·고객별 Top N
- SQL 학습 실습 8 · 6작업 · 집합 연산·조건부 피벗·전체 검산