SQL_SQLD_함수

MR.HAN·2024년 1월 28일

SQL

목록 보기
7/10

함수의 종류

  • 내장 함수 (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 관련 함수 정리
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;

# 숫자형으로 날짜 추출 예시 (06 이런 경우 6으로 추출할 수 있음.)
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 표현

  • 조건절 표현
# Simple Case Expression - CASE 다음에 조건에 사용되는 컬럼, 표현식 표시, 같은지 아닌지 판단
SELECT DEPT_NO, DEPTH_NAME, CASE DEPT_NO
	WHEN 'd001' THEN '마케팅부서'
    WHEN 'd002' THEN '재정부서'
    ELSE '기타부서'
END AS 부서구분
FROM DEPARTMENTS;

# Searched Case Expression
SELECT EMP_NO, SALARY, CASE
	WHEN SALARY > 70000 THEN '상'
    WHEN SALARY > 60000 THEN '중'
    ELSE '하'
END AS 연봉등급
FROM SALARIES;

# CASE 문 중첩 사용
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 함수를 사용해도 여전히 공집합으로 출력
# 표현식1의 결과값이 NULL이면 표현식2의 값을 변환
NVL(표현식1, 표현식2)
ISNULL(표현식1, 표현식2)

# 표현식1이 표현식2와 같으면 NULL, 같지 않으면 표현식1을 반환
NULLIF(표현식1, 표현식2)

# NULL이 아닌 최초의 표현식을 나타냄, 모든 표현식이 NULL이면 NULL 리턴
COALESCE(표현식1, 표현식2, 표현식3, ...)

0개의 댓글