함수의 종류
- 내장 함수 (Built-in Function) : 벤더 제공 함수
- 단일 행 함수 (Single-Row Function)
- 다중 행 함수 (Multi-Row Function)
- 집계 함수 (Aggregation Function)
- 그룹 함수 (Group Function)
- 윈도우 함수 (Window Function)
- 사용자 정의 함수 (User Defined Function) : 사용자가 직접 작성한 함수
단일 행 함수
특징
- SELECT, WHERE, ORDER BY 절에서 사용 가능 (위치는 SELECT, WHERE, ORDER BY 뒤)
- 여러 인자 입력해도 출력(리턴)은 하나
- 함수의 인자로 상수, 변수, 표현식 사용 가능
- 함수의 인자로 함수 사용 가능
문자형 함수
LOWER('SQL Expert');
→ 'sql expert'
UPPER('SQL Expert');
→ 'SQL EXPERT'
ASCII('A');
→ 65
CHR(65);
CHAR(65);
→ 'A'
CONCAT('RDBMS', ' SQL');
'RDBMS'||' SQL';
'RDBMS' + ' SQL';
→ 'RDBMS SQL'
SUBSTR('SQL Expert', 5, 3);
SUBSTRING('SQL Expert', 5, 3);
→ 'Exp'
LENGTH('SQL Expert');
LEN('SQL Expert');
→ 10
TRIM('x' FROM 'xxYYZZxYZxx');
→ 'YYZZxYZ'
LTRIM('xxxYYZZxYZ', 'x');
→ 'YYZZxYZ'
RTRIM('XXYYzzXYzz', 'z');
→ 'XXYYzzXY'
RTRIM('XXYYZZXYZ ');
→ 'XXYYZZXYZ'
숫자형 함수
ABS(-15);
→ 15
SIGN(-20);
→ -1
SIGN(0);
→ 0
SIGN(20);
→ 1
MOD(7, 3);
7 % 3;
→ 1
CEIL(38.123);
CEILING(38.123);
→ 39
CEILING(-38.123);
→ -38
FLOOR(38.123);
→ 38
FLOOR(-38.123);
→ -39
ROUND(38.5235, 3);
→ 38.524
ROUND(38.5235, 0);
→ 39
ROUND(38.5235);
→ 39
TRUNC(38.5235, 3);
→ 38.523
TRUNC(38.5235, 0);
→ 38
SIN(), COS(), TAN();
EXP(), POWER(), SQRT(), LOG(), LN();
날짜형 함수
- 연산
- 날짜 + 숫자 : 숫자만큼의 날수를 날짜에 더함.
- 날짜 - 숫자 : 숫자만큼의 날수를 날짜에 뺌.
- 날짜1 - 날짜2 : 날짜1에서 날짜2를 뺀 일수
- 날짜 + 숫자/24 : 시간을 날짜에 더함.
SYSDATE;
GETDATE();
→ 2023-08-08 16:36:52.686+09
EXTRACT('YEAR'|'MONTH'|'DAY' from d);
DATEPART('YEAR'|'MONTH'|'DAY', d);
TO_NUMBER(TO_CHAR(d, 'YYYY'));
YEAR(d);
TO_NUMBER(TO_CHAR(d, 'MM'));
MONTH(d);
TO_NUMBER(TO_CHAR(d, 'DD'));
DAY(d);
SELECT TO_CHAR(HIRE_DATE, 'YYYY') AS 입사연도,
TO_CHAR(HIRE_DATE, 'MM') AS 입사연도,
TO_CHAR(HIRE_DATE, 'DD') AS 입사연도,
FROM EMPLOYEES;
SELECT TO_CHAR(HIRE_DATE, 'YYYY') AS 입사연도,
CAST(TO_CHAR(HIRE_DATE, 'MM') AS INT) AS 입사연도,
CAST(TO_CHAR(HIRE_DATE, 'DD') AS INT) AS 입사연도,
FROM EMPLOYEES;
SELECT TO_CHAR(HIRE_DATE, 'YYYY') AS 입사연도,
TO_NUMBER(TO_CHAR(HIRE_DATE, 'MM')) AS 입사연도,
TO_NUMBER(TO_CHAR(HIRE_DATE, 'DD')) AS 입사연도,
FROM EMPLOYEES;
형 변환 함수
- 명시적(Explicit) 형 변환 : 데이터 변환형 함수를 명시적으로 사용
- 암시적(Implicit) 형 변환 : 명시적 형 변환 없이 데이터베이스가 자동으로 변환
- 성능 저하 및 에러 발생 가능성 있음. 명시적 형 변환 사용이 바람직
SELECT CAST(25.65 AS int);
SELECT CONVERT(int, 25.65);
SELECT TO_CHAR(HIRE_DATE, 'YYYY/MM/DD') AS 날짜1, TO_CHAR(HIRE_DATE, 'YYYY.MON,DAY') AS 날짜2
FROM EMPLOYEES;
SELECT TO_CHAR(SALARY*1200, 'L999,999,999.99') AS 연봉 FROM SALARIES;
CASE 표현
SELECT DEPT_NO, DEPTH_NAME, CASE DEPT_NO
WHEN 'd001' THEN '마케팅부서'
WHEN 'd002' THEN '재정부서'
ELSE '기타부서'
END AS 부서구분
FROM DEPARTMENTS;
SELECT EMP_NO, SALARY, CASE
WHEN SALARY > 70000 THEN '상'
WHEN SALARY > 60000 THEN '중'
ELSE '하'
END AS 연봉등급
FROM SALARIES;
SELECT EMP_NO, SALARY, CASE
WHEN SALARY > 70000 THEN SALARY*0.1
ELSE (CASE
WHEN SALARY > 60000 THEN SALARY*0.05 ELSE 0 END)
AS BONUS
FROM SALARIES;
NULL 관련 함수
- NULL 특징
- NULL은 정의되지 않은 값 0 또는 공백과 다름.
- NOT NULL 또는 PK로 정의하지 않은 모든 데이터 유형은 NULL 값을 포함할 수 있음.
- NULL 값이 연산에 포함되면 결과값은 NULL (NULL이 아닌 다른 값을 얻고자 할 때 NVL, ISNULL 함수 사용)
- NULL과 공집합
- 조건에 맞는 데이터가 한 건도 없는 경우를 공집합이라고 함.
- 공집합은 NVL, ISNULL 함수를 사용해도 여전히 공집합으로 출력
NVL(표현식1, 표현식2)
ISNULL(표현식1, 표현식2)
NULLIF(표현식1, 표현식2)
COALESCE(표현식1, 표현식2, 표현식3, ...)