Oracle 함수 완벽 가이드 (SQLD 대비)

1. 문자형 함수

문자 데이터를 가공하는 함수들입니다.

1.1 기본 문자 함수

함수 설명 예제
LOWER 소문자로 변환 SELECT LOWER('HELLO') -> hello
UPPER 대문자로 변환 SELECT UPPER('hello') -> HELLO
INITCAP 첫 글자만 대문자로 변환 SELECT INITCAP('hello world') -> Hello World
LENGTH 문자열 길이 반환 SELECT LENGTH('SMITH') -> 5
*-- LOWER, UPPER, INITCAP 예제*
SELECT first_name,
       LOWER(first_name) as lower_name,
       UPPER(first_name) as upper_name,
       INITCAP(first_name) as initcap_name
FROM employees
WHERE department_id = 60;

*-- LENGTH, LENGTHB 예제*
SELECT first_name,
       LENGTH(first_name) as length_char,  *-- 문자 개수*
       LENGTHB(first_name) as length_byte  *-- 바이트 수*
FROM employees
WHERE department_id = 60;

*-- CONCAT 예제*
SELECT first_name,
       last_name,
       CONCAT(first_name, last_name) as full_name,
       first_name || ' ' || last_name as full_name2
FROM employees
WHERE department_id = 60;

1.2 문자열 조작 함수

함수 설명 사용법
CONCAT 문자열 결합 CONCAT(str1, str2)
SUBSTR 문자열 부분 추출 SUBSTR(str, position [,length])
LPAD/RPAD 좌/우측 채우기 LPAD(str, len [,pad_str])
LTRIM/RTRIM 좌/우측 공백 제거 LTRIM(str [,trim_str])
REPLACE 문자열 치환 REPLACE(str, old, new)
INSTR 문자열 위치 찾기 INSTR(str, substr [,pos [,nth]])
-- SUBSTR 예제
SELECT first_name,
       SUBSTR(first_name, 1, 3) as first_three_chars,
       SUBSTR(first_name, -3) as last_three_chars,
       SUBSTR(first_name, 2, 4) as from_second_four_chars
FROM employees
WHERE department_id = 60;

-- INSTR 예제
SELECT phone_number,
       INSTR(phone_number, '.') as first_dot_pos,        -- 첫 번째 '.' 위치
       INSTR(phone_number, '.', 1, 2) as second_dot_pos, -- 두 번째 '.' 위치
       INSTR(phone_number, '650') as area_code_pos       -- 지역번호 '650' 위치
FROM employees
WHERE department_id = 60;;

-- LPAD, RPAD 예제
SELECT salary,
       LPAD(salary, 10, '*') as salary_left_pad,
       RPAD(salary, 10, '*') as salary_right_pad,
       LPAD(salary, 10, '0') as salary_zero_pad
FROM employees
WHERE department_id = 60;

-- LTRIM, RTRIM, TRIM 예제
SELECT first_name,
       LTRIM(first_name, 'A') as ltrim_result,
       RTRIM(first_name, 'n') as rtrim_result,
       TRIM('A' FROM first_name) as trim_result,
       TRIM(' ' FROM '  HELLO  ') as space_trim
FROM employees
WHERE department_id = 60;

-- REPLACE 예제
SELECT job_id,
       REPLACE(job_id, 'IT', 'Information_Technology') as new_job_id,
       email,
       REPLACE(email, '@example.com', '@newdomain.com') as new_email
FROM employees
WHERE department_id = 60;

2. 숫자형 함수

숫자를 처리하는 함수들입니다.

2.1 기본 숫자 함수

함수 설명 예제
ROUND 반올림 ROUND(45.926, 2) -> 45.93
TRUNC 절삭 TRUNC(45.926, 2) -> 45.92
CEIL 올림 CEIL(45.1) -> 46
FLOOR 내림 FLOOR(45.9) -> 45
MOD 나머지 MOD(1600, 300) -> 100
ABS 절대값 ABS(-15) -> 15
SIGN 부호 SIGN(-15) -> -1
POWER 제곱 POWER(3, 2) -> 9
-- ROUND, TRUNC, CEIL, FLOOR 예제
SELECT salary,
       ROUND(salary/7) as round_result,
       ROUND(salary/7, 2) as round_decimal,
       TRUNC(salary/7) as trunc_result,
       TRUNC(salary/7, 2) as trunc_decimal,
       CEIL(salary/7) as ceil_result,
       FLOOR(salary/7) as floor_result
FROM employees
WHERE department_id = 60;

-- MOD, ABS, SIGN 예제
SELECT salary,
       MOD(salary, 1000) as salary_remainder,
       ABS(salary - 10000) as absolute_diff,
       SIGN(salary - 10000) as salary_sign
FROM employees
WHERE department_id = 60;

-- POWER, SQRT 예제
SELECT salary,
       POWER(salary, 2) as salary_squared,
       SQRT(salary) as salary_square_root,
       POWER(salary, 1/3) as salary_cube_root
FROM employees
WHERE department_id = 60;

3. 날짜형 함수

날짜와 시간을 처리하는 함수들입니다.

3.1 기본 날짜 함수

함수 설명 예제
SYSDATE 현재 날짜시간 SELECT SYSDATE FROM DUAL
MONTHS_BETWEEN 개월 수 차이 MONTHS_BETWEEN(date1, date2)
ADD_MONTHS 개월 수 더하기 ADD_MONTHS(date, n)
NEXT_DAY 다음 요일 NEXT_DAY(date, '월요일')
LAST_DAY 월의 마지막 날 LAST_DAY(date)
ROUND 날짜 반올림 ROUND(date, 'MONTH')
TRUNC 날짜 절삭 TRUNC(date, 'MONTH')
-- SYSDATE, CURRENT_DATE, SYSTIMESTAMP 예제
SELECT SYSDATE as system_date,
       CURRENT_DATE as current_date,
       SYSTIMESTAMP as system_timestamp
FROM dual;

-- ADD_MONTHS, MONTHS_BETWEEN 예제
SELECT hire_date,
       ADD_MONTHS(hire_date, 6) as after_6months,
       ADD_MONTHS(hire_date, -6) as before_6months,
       MONTHS_BETWEEN(SYSDATE, hire_date) as months_worked
FROM employees
WHERE department_id = 60;

-- NEXT_DAY, LAST_DAY 예제
SELECT VALUE 
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_TERRITORY';
--KOREA 이면 한글표기법 사용
--ENGLISH 이면 영어표기법 사용
--언어와 상관없이 숫자사용
--1 일요일(Sunday)
--2 월요일(Monday)
--3 화요일(Tuesday)
--4 수요일(Wednesday)
--5 목요일(Thursday)
--6 금요일(Friday)
--7 토요일(Saturday)
alter session set NLS_LANGUAGE='ENGLISH';
SELECT sysdate,
       NEXT_DAY(sysdate, 6) as next_friday,
       LAST_DAY(sysdate) as month_end,
       NEXT_DAY(LAST_DAY(sysdate), 'SUNDAY') as first_sunday_next_month
FROM dual;

-- ROUND, TRUNC 날짜 예제
SELECT hire_date,
       ROUND(hire_date, 'MONTH') as round_month,
       ROUND(hire_date, 'YEAR') as round_year,
       TRUNC(hire_date, 'MONTH') as trunc_month,
       TRUNC(hire_date, 'YEAR') as trunc_year
FROM employees
WHERE department_id = 60;

4. 변환 함수 (SQLD 중요)