공든탑앱 열기

단일행 함수

SQLD (SQL 개발자) · SQL 기본 · 약 14분

쉽게 말하면

단일행 함수는 줄 하나하나에 값을 바꿔 주는 도구예요. 글자를 자르거나(SUBSTR) 대문자로 바꾸고, 숫자를 반올림하고(ROUND), 날짜에 달을 더하는 식이에요. 열 줄을 넣으면 열 줄이 그대로 나와요. 여러 줄을 하나로 합치는 집계 함수와 다른 점이에요.

시험용 정의

단일행 함수는 행 하나마다 값 하나를 돌려주는 함수다. 다루는 값에 따라 문자 함수(SUBSTR, LENGTH, UPPER…), 숫자 함수(ROUND, TRUNC, MOD…), 날짜 함수(SYSDATE, ADD_MONTHS…), 변환 함수(TO_CHAR, TO_DATE, TO_NUMBER, CAST)로 나눈다. SELECT·WHERE·ORDER BY 어디서나 쓸 수 있고, 함수 안에 함수를 겹쳐 쓸 수 있다.

비유로 이해하기

행 하나하나를 차례로 통과시키는 기계다. 이름을 넣으면 소문자로 바꿔 내보내고, 숫자를 넣으면 반올림해 내보낸다. 들어간 행 수와 나온 행 수가 같다. 여러 행을 하나로 뭉치는 집계 함수와 다른 점이다.

자세히

먼저 알아 둘 말

말뜻
인수함수 괄호 안에 넣는 값. SUBSTR('ABC', 2, 1)에서 'ABC', 2, 1
단일행 함수 vs 다중행 함수단일행은 행마다 결과 하나, 다중행(집계 함수 SUM·COUNT 등)은 여러 행을 묶어 결과 하나
형변환문자 '100'을 숫자 100으로처럼 자료형을 바꾸는 것. 직접 하면 명시적, DBMS가 알아서 하면 암시적
SYSDATEOracle에서 현재 날짜·시각. SQL Server는 GETDATE()

문자 함수

함수결과 예메모
LOWER / UPPER / INITCAPLOWER('KIM') → kimINITCAP은 첫 글자만 대문자
LENGTH(s)LENGTH('SQLD') → 4SQL Server는 LEN
SUBSTR(s, 시작, 길이)SUBSTR('SQLD2026', 5, 2) → 20시작이 음수면 뒤에서부터. SQL Server는 SUBSTRING
INSTR(s, 찾을것, 시작, n번째)INSTR('BANANA', 'A', 1, 2) → 4없으면 0
LTRIM / RTRIM / TRIMTRIM(' hi ') → hiTRIM('x' FROM s)로 특정 문자
LPAD / RPAD(s, 길이, 채울문자)LPAD('9000', 6, '*') → **9000
REPLACE(s, a, b)REPLACE('A-B-C', '-') → ABCb를 생략하면 지운다
CONCAT(a, b)CONCAT('A', 'B') → AB인수 두 개만

숫자 함수

함수결과 예메모
ROUND(n, 자리)ROUND(1234.567, 1) → 1234.6음수 자리는 정수부에서 반올림
TRUNC(n, 자리)TRUNC(1234.567, 1) → 1234.5버림. SQL Server는 ROUND(n, d, 1)
CEIL / FLOORCEIL(12.1) → 13, FLOOR(-12.1) → -13CEIL은 같거나 큰 최소 정수, FLOOR는 같거나 작은 최대 정수. SQL Server는 CEILING
MOD(a, b)MOD(17, 5) → 2나머지. SQL Server는 a % b
ABS / SIGN / POWER / SQRTSIGN(-3) → -1절댓값, 부호, 거듭제곱, 제곱근

날짜와 변환 함수

함수결과 예메모
SYSDATE현재 날짜SQL Server는 GETDATE()
날짜 + 숫자hiredate + 1 → 다음 날날짜 - 날짜 = 일수, 날짜 + 1/24 = 1시간 뒤
ADD_MONTHS(d, n)ADD_MONTHS('2023-08-01', 6) → 2024-02-01n개월 뒤
EXTRACT(YEAR FROM d)2023SQL Server는 YEAR(d), DATEPART
TO_CHAR(d, 'YYYY.MM')2023.08날짜·숫자 → 문자
TO_DATE('20261114', 'YYYYMMDD')날짜문자 → 날짜
TO_NUMBER('100') / CAST(x AS 형)100문자 → 숫자, 표준 형변환

암시적 형변환

숫자 열과 문자를 비교하면 Oracle은 문자를 숫자로 바꿔 비교한다. WHERE sal = '3000'은 동작하지만, 문자 열을 숫자와 비교하면(WHERE 문자열 = 100) 열 값 전체를 숫자로 바꾸느라 숫자가 아닌 값이 있으면 오류가 나고, 그 열의 인덱스도 쓰지 못한다. 형은 명시적으로 맞춰 쓰는 것이 좋다.

시험에 이렇게 나와요

출제 범위·공식 안내 기반

확인 문제

Q1. SELECT ROUND(1234.567, -2) FROM DUAL의 결과는?

  1. 1200
  2. 1234
  3. 1234.57
  4. 1300
정답 보기

1번 1200

두 번째 인수가 음수면 소수점 왼쪽 자리에서 반올림한다. -2는 십의 자리에서 반올림해 백의 자리까지 남기므로 1234.567 → 1200.

Q2. SELECT SUBSTR('DATABASE', 3, 4) FROM DUAL의 결과는?

  1. TABA
  2. DATA
  3. BASE
  4. ABAS
정답 보기

1번 TABA

3번째 글자 T부터 4글자 → TABA.

Q3. INSTR('CORPORATE FLOOR', 'OR', 3, 2)의 결과는?

  1. 0
  2. 2
  3. 5
  4. 14
정답 보기

4번 14

3번째 글자부터 'OR'을 찾으면 5번째(CORPORATE)가 첫 번째, 14번째(FLOOR)가 두 번째다.

Q4. 결과가 나머지와 다른 것은?

  1. TRUNC(5.9)
  2. CEIL(4.1)
  3. ROUND(4.5)
  4. FLOOR(6.1)
정답 보기

4번 FLOOR(6.1)

CEIL(4.1) = 5, ROUND(4.5) = 5, TRUNC(5.9) = 5, FLOOR(6.1) = 6.

Q5. SQL Server 함수와 Oracle 함수의 짝이 틀린 것은?

  1. GETDATE() - SYSDATE
  2. SUBSTRING - SUBSTR
  3. LEN - LENGTH
  4. CEIL - FLOOR
정답 보기

4번 CEIL - FLOOR

SQL Server의 CEILING이 Oracle의 CEIL과 짝이다. FLOOR는 둘 다 FLOOR.

헷갈리기 쉬운 O·X

단일행 함수는 여러 행을 묶어 결과를 하나만 돌려준다.

정답 보기

X 그것은 집계(다중행) 함수다. 단일행 함수는 행마다 결과 하나.

Oracle에서 날짜에 숫자 1을 더하면 하루 뒤가 된다.

정답 보기

O 날짜 연산의 단위는 일(day)이다. 1/24는 1시간.

FLOOR(-12.1)의 결과는 -12다.

정답 보기

X FLOOR는 같거나 작은 최대 정수라 -13이다.

함께 보면 좋은 개념