제6절 함수(FUNCTION)
1. 내장 함수(BUILT-IN FUNCTION) 개요: 벤더(DBMS)에서 제공하여 내장된 함수
가. 단일행 함수(Single-Row Function)
- 문자형, 숫자형, 날짜형, 변환형, NULL관련함수
나. 다중행 함수(Multi-Row Function)
- 집계 함수(Aggregate Function), 그룹 함수(Group Function), 윈도우 함수(Window Function)
2. 문자형 함수
문자형 함수 | 함수 설명 |
LOWER(문자열) | 문자열의 알파벳을 소문자 변경 |
UPPER(문자열) | 문자열의 알파벳을 대문자 변경 |
CONCAT(문자열1, 문자열2) 문자열1 || 문자열2 문자열1 + 문자열2 |
문자열1과 문자열2를 연결, ||(파이프라인), + 연결과 동일 |
SUBSTR(문자열, m, n) SUBSTRING(문자열, m, n) |
문자열 중 m위치부터 n개 문자 길이까지만 추출, n생략시 마지막 문자까지 추출 |
LENGTH(문자열) LEN(문자열) |
문자열의 개수를 세서 숫자로 추출 |
LTRIM(문자열, 지정문자) | 문자열 왼쪽부터 지정문자가 나타면 해당 문자 제거, 지정문자가 없으면 공백 제거 |
RTRIM(문자열, 지정문자) | 문자열 오른쪽부터 지정문자가 나타면 해당 문자 제거, 지정문자가 없으면 공백 제거 |
TRIM(지정문자 FROM 문자열) | 문자열에서 양쪽에 있는 지정문자 제거, 지정문자가 없으면 공백 제거 |
ASCII(문자) | 문자나 숫자를 ASCII코드 번호로 변경 |
CHS/CHAR(ASCII번호) | ASCII 코드 번호를 문자나 숫자로 변경 |
3. 숫자형 함수
숫자형 함수 | 함수 설명 |
ABS(숫자) | 숫자를 절대값으로 변경 |
SIGN(숫자) | 숫자를 양수, 음수, 0 으로 구별 |
MOD(숫자1, 숫자2) 숫자1%숫자2 |
숫자1을 숫자2로 나누어 나머지 값 추출 |
CEIL(숫자) CEILING(숫자) |
숫자보다 크거나 같은 최소 정수 추출 |
FLOOR(숫자) | 숫자보다 작거나 같은 최대 정수 추출 |
ROUND(숫자, m) | 숫자를 소수점 m자리에서 반올림, m 생략시 디폴트 값은 0 |
TRUNC(숫자, m) | 숫자를 소수점 m자리에서 자르기, m 생략시 디폴트 값은 0 |
SIN, COS, TAN ... | 숫자의 삼각함수 값을 추출 |
EXP(), POWER(), SQRT(), LOG(), LN() | 숫자의 지수, 거듭제곱, 제곱근, 자연로그 |
4. 날짜형 함수(DATE 타입)
날짜형 함수 | 함수 설명 |
SYSDATE GETDATE() |
현재 날짜와 시간 |
EXTRACT( 'YEAR' | 'MONTH' | 'DAY' from d ) DATEPART( 'YEAR' | 'MONTH' | 'DAY' , d ) |
날짜 데이터에서 년/월/일 데이터를 추출 |
TO_NUMBER( TO_CHAR (d, 'YYYY') ) TO_NUMBER( TO_CHAR (d, 'MM') ) TO_NUMBER( TO_CHAR (d, 'DD') ) YEAR(d) MONTH(d) DAY(d) |
년, 월, 일 데이터 추출 |
연산 | 결과 | 설명 |
날짜 + 숫자 | 날짜 | 숫자만큼의 날수를 날짜에 더한다. |
날짜 - 숫자 | 날짜 | 숫자만큼의 날수를 날짜에서 뺀다. |
날짜1 - 날짜2 | 날짜수 | 다른 하나의 날짜에서 하나의 날짜를 빼면 일수가 나온다. |
날짜 + 숫자/24 | 날짜 | 시간을 날짜에 더한다. |
5. 변환형 함수
종류 | 설명 |
명시적(Explicit) 데이터 유형 변환 | 데이터 변환형 함수로 데이터 유형을 변환 |
암시적(Implicit) 데이터 유형 변환 | 데이터베이스가 자동으로 데이터 유형을 변환 |
변환형 함수 | 함수 설명 |
TO_NUMBER(문자열) CAST(문자열 AS 숫자형_데이터타입) |
문자열을 숫자로 변환 |
TO_CHAR(숫자 or 날짜, [FORMAT]) | 숫자 또는 날짜를 주어진 문자열 FORMAT으로 변환 |
TO_DATE(문자열, [FORMAT]) | 문자열을 주어진 날짜 FORMAT으로 변환 |
6. CASE 표현
- IF 조건문과 유사함
표현식 기본 (조건 1개) | 표현식 확장 (조건 2개 이상) | 설명 |
CASE 컬럼1 WHEN 조건문자1 THEN 반환문자1 ELSE 반환문자2(나머지) END |
CASE 컬럼1 WHEN 조건문자1 THEN 반환문자1 WHEN 조건문자2 THEN 반환문자2 WHEN 조건문자3 THEN 반환문자3 .... ELSE 반환문자4(나머지) END |
컬럼 값이 특정 문자랑 같은지 조건으로 사용하는 경우 |
CASE WHEN 조건1 THEN 반환문자1 ELSE 반환문자2(나머지) END |
CASE WHEN 조건1 THEN 반환문자1 WHEN 조건2 THEN 반환문자2 WHEN 조건3 THEN 반환문자3 .... ELSE 반환문자4(나머지) END |
다양한 조건을 사용하는 경우 |
# 표현식 기본 (조건 1개)
# BillingCountry의 값을 미국만 한국어로 변경하기
SELECT InvoiceId, InvoiceDate, BillingCity, BillingCountry, Total
, CASE BillingCountry
WHEN 'USA' THEN '미국'
ELSE 'ETC'
END Country_Korean
FROM Invoice;
# 표현식 확장 (조건 2개 이상)
# BillingCountry의 값을 전부 한국어로 변경하기
SELECT InvoiceId, InvoiceDate, BillingCity, BillingCountry, Total
, CASE BillingCountry
WHEN 'USA' THEN '미국'
WHEN 'Germany' THEN '독일'
WHEN 'Canada' THEN '캐나다'
WHEN 'Norway' THEN '노르웨이'
WHEN 'Belgium' THEN '벨기에'
ELSE 'ETC'
END Country_Korean
FROM Invoice;
# 다양한 조건으로 표현식 확장 (조건 2개 이상)
# Total 값을 구간화(Binning) 한 컬럼 생성
SELECT InvoiceId, InvoiceDate, BillingCity, BillingCountry, Total
, CASE WHEN Total <= 1 THEN '1이하'
WHEN Total <= 3 THEN '1초과 3이하'
WHEN Total <= 5 THEN '3초과 5이하'
WHEN Total <= 10 THEN '5초과 10이하'
ELSE '10초과'
END Total_Binning
FROM Invoice;
7. NULL 관련 함수
- 널 값은 아직 정의되지 않은 값으로 0 또는 공백과 다르다. 0은 숫자이고, 공백은 하나의 문자이다.
- 테이블을 생성할 때 NOT NULL 또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 널 값을 포함할 수 있다.
- 널 값을 포함하는 연산의 경우 결과 값도 널 값이다.
- 결과값을 NULL이 아닌 다른 값을 얻고자 할 때 NVL/ISNULL 함수를 사용한다.
# NULLIF
SELECT BillingCountry, BillingCity
, NULLIF(BillingCountry,'USA') # BillingCountry가 USA면 NULL로 변경
FROM Invoice
# COALESCE
SELECT BillingCountry, BillingCity, NULL_IF
, COALESCE(NULL_IF, '미국') #NULL_IF을 먼저 추출하되 NULL이면 그 다음 값('미국')으로 추출
FROM Invoice
'SQL > SQLD (개발자)' 카테고리의 다른 글
2-1. SQL 기본_(8)ORDER BY 절 (0) | 2021.08.29 |
---|---|
2-1. SQL 기본_(7)GROUP BY, HAVING 절 (0) | 2021.08.29 |
2-1. SQL 기본_(5)WHERE 절 (0) | 2021.08.25 |
2-1. SQL 기본_(4)TCL(TRANSACTION CONTROL LANGUAGE) (0) | 2021.08.24 |
2-1. SQL 기본_(3)DML(DATA MANIPULATION LANGUAGE) (0) | 2021.08.22 |