반응형

안녕하세요! 😄 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)

mn으로 나눈 나머지를 반환합니다.
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(*)
반응형

+ Recent posts