본문 바로가기
SQL

함수(Function)

by csue 2021. 7. 11.

단일 행 함수들의 주요 특징

  • select, where, order by 절에 사용 가능하다
  • 각 행들에 대해 개별적으로 적용되어 데이터값들을 조작하고, 각각의 행에 대한 조작 결과를 리턴한다
  • 여러 인자를 입력해도 단 하나의 결과만 리턴한다
  • 특별한 경우가 아니면 함수의 인자로 함수를 사용하는 함수의 중첩이 가능하다

종류

Oracle 기준이므로 MySQL, postgresql 등 다른 RDBMS 를 사용할 경우에는 해당 함수가 있는지 찾아보고 사용해야 한다.

내장함수로 비슷한 기능의 다른 함수가 존재할 수도 있다.

문자형 함수

문자를 입력하면 문자나 숫자 값을 반환한다.

LOWER 소문자로 변환 LOWER('SQL Developer') sql developer
UPPER 대문자로 변환 UPPER('SQL Developer') SQL DEVELOPER
ASCII 아스키코드 값 출력 ASCII('A') 65
CHR 아스키코드값의 문자 출력 CHR('65') A
CONCAT 문자열 결합 CONCAT('SQL Developer') SQLDeveloper
SUBSTR 문자열 잘라내기 SUBSTR('SQL Developer', 2, 5)
두 번째 문자열부터 다섯번째 문자열까지
(끝까지 잘라내고 싶은 경우 뒤의 숫자 생략)
QL Devel
LENGTH 문자열의 길이 출력 LENGTH('SQL Developer') 13
(공백 포함)
TRIM 공백 제거 TRIM( ' SQL ') SQL
LTRIM 왼쪽 공백 제거 LTRIM( ' SQL') SQL
RTRIM 오른쪽 공백 제거 RTRIM( 'SQL ') SQL

숫자형 함수

숫자를 입력하면 숫자 값을 반환한다.

ABS 절대값을 반환 ABS(-20) 20
SIGN 계산한 값이 양수인지 음수인지 0인지 판단하고 양수일 경우 1, 음수일 경우 -1, 0인 경우 0을 반환 SING(30-50) -1
MOD 나머지를 반환 MOD(8, 3)
8을 3으로 나눈 나머지 반환
2
CEIL 무조건 올림 CEIL(12.345) 13
FLOOR 무조건 버림 FLOOR(12.345) 12
ROUND 반올림 ROUND(12.345, 2)
소수점 두 번째 자리에서 반올림
12.35
TRUNC 숫자 자르기 TRUNC(12.345, 1)
TRUNC(12.345, 2)
TRUNC(12.345, 3)
12.3
12.34
12.345

날짜형 함수

DATE 타입의 값을 연산한다.

SYSDATE 현재 년월일시분초 출력 SYSDATE 2021-07-25 07:33:58
EXTRACT 날짜에서 특정 정보 추출 EXTRACT(YEAR FROM SYSDATE)
EXTRACT(MONTH FROM SYSDATE)
EXTRACT(DAY FROM SYSDATE)
2021
7
25
TO_NUMBER 문자를 숫자로 변환 TO_NUMBER(TO_CHAR(SYSDATE, 'YYYY'))
TO_NUMBER(TO_CHAR(SYSDATE'MM'))
TO_NUMBER(TO_CHAR(SYSDATE'DD'))
TO_NUMBER(TO_CHAR(SYSDATE'HH24'))
TO_NUMBER(TO_CHAR(SYSDATE'MI'))
TO_NUMBER(TO_CHAR(SYSDATE'SS'))
2021
7
25
7
33
58
TO_CHAR 숫자나 날짜를 문자로 변환 TO_CHAR(SYSDATE'YYYY')
TO_CHAR(SYSDATE'MM')
TO_CHAR(SYSDATE'DD')
...
2021
7
25
...

데이터 변환

  • 데이터 변환의 종류
    명시적 형 변환 : 데이터 유형을 변환하도록 명시해주는 경우
    암시적 형 변환 : DBMS 가 자동으로 데이터 유형을 변환하는 경우
  • 데이터 변환 함수 TO_NUMBER & TO_CHAR
    사용의 예시
TO_CHAR(SYSDATE, 'YYYY/MM/DD') 2021/07/25
TO_CHAR(123456, '999,999) 123,456
TO_CHAR(123000, '$999,999) $123,000

날짜형 데이터의 연산

SYSDATE -1 1일을 뺀 SYSDATE 2021-07-24 07:33:58
SYSDATE -(1/24) 1시간을 뺀 SYSDATE 2021-07-25 06:33:58
SYSDATE -(1/24/60) 1분을 뺀 SYSDATE 2021-07-25 07:32:58
SYSDATE -(1/24/60/60) 1초를 뺀 SYSDATE 2021-07-25 07:33:57
SYSDATE -(1/24/60/60) * 10 10초를 뺀 SYSDATE 2021-07-25 07:33:48

단일 행 CASE 표현의 종류

조건절 CASE

CASE
	WHEN 조건1 THEN 값1
	WHEN 조건 2 THEN 값2
	ELSE 값
END

예시)

SELECT CASE
	WHEN LEVEL_CD = 'Bronze' THEN '브론즈'
	WHEN LEVEL_CD = 'Silver' THEN '실버'
	WHEN LEVEL_CD = 'Gold' THEN '골드'
	ELSE '언랭'
	END

DECODE

DECODE(조건1, 값1, 조건2, 값2, ... , 디폴트값)

 

NULL

NULL 연산의 결과는 모두 NULL 이다.

NULL 관련 함수

NVL NULL 값을 실제로 변환한다 SELECT NVL(LEVEL_CD, '언랭')
FROM TB_LEVEL
WHERE LEVEL_CD IS NULL

LEVEL_CD 가 NULL 이면 '언랭' 으로 출력한다.
NULLIF(조건1, 조건2) 조건1과 조건2의 값이 같으면 NULL, 같지 않으면 조건1을 반환한다. NULLIF('사과', '딸기')
NVL

같지 않으므로 '사과' 를 출력한다.
COALESCE(조건1, 조건2, ...) 조건들 중 NULL 이 아닌 조건을 만나게 되면 해당 조건을 출력한다. COALESCE(NULL, NULL, 0)
COALESCE(NULL, 0, 6000)


0 을 출력한다.

'SQL' 카테고리의 다른 글

JOIN  (0) 2021.08.08
GROUP BY, HAVING, ORDER BY  (0) 2021.08.08
SQL 명령어 :: WHERE  (0) 2021.07.11
DML, DDL, TCL  (0) 2021.06.06
성능 데이터 모델링  (0) 2021.05.21