함수란?
하나의 큰 프로그램에서 반복적으로 사용되는 부분들을 분리하여 작성해 놓은 작은 서브 프로그램
호출하며 값을 전달하면 결과를 리턴하는 방식으로 사용
함수 유형
- 단일 행 함수 : 각 행마다 반복적으로 적용되어 입력받은 행의 개수만큼 결과 반환
- 그룹 함수 : 특정 행들의 집합으로 그룹이 형성되어 적용되어 그룹 당 1개의 결과 반환
* 결과 행의 개수가 다르기 때문에 SELECT 절에 단일행 함수와 그룹 함수 함께 사용 불가
함수식을 기술할 수 있는 위치 : SELECT절, WHERE절, ORDER BY절, GROUP BY절, HAVING절
문자 처리 함수
- LENGTH : 주어진 컬럼 값 / 문자열의 길이(문자 개수) 반환
작성법 - LENGTH(CHAR | STRING)
- LENGTHB : 주어진 컬럼 값 / 문자열의 길이(BYTE) 반환
작성법 - LENGTHB(CHAR | STRING)
* 'ㄱ', '김', '나' 한글자당 3BYTE
* 영문자, 숫자, 특문 한글자당 1BYTE
SELECT LENGTH('오라클'), LENGTHB('오라클')
FROM DUAL;
SELECT LENGTH('oracle'), LENGTHB('oracle')
FROM DUAL;
- INSTR : 지정한 위치부터 지정한 숫자 번째로 나타나는 문자의 시작 위치 반환
작성법 - INSTR(STRING, STR, [POSITION,[OCCURRENCE]])
* STR : 찾으려는 문자열
* POSITION : 찾을 위치 시작 값 (기본 값 1)
POSITION > 0이면 STRING의 시작부터 끝 방향으로 찾고
POSITION < 0이면 STRING의 끝부터 시작 방향으로 찾음
* OCCURRENCE : SUBSTRING이 반복될 때 지정하는 빈도 (기본 값 1), 음수 사용 불가
// EMAIL 컬럼의 문자열 중 '_'와 '@'의 위치를 구하시오.
SELECT EMAIL, INSTR(EMAIL, '_', 1, 1) AS "_위치", INSTR(EMAIL, '@') AS "@위치"
FROM EMPLOYEE;
- LPAD / RPAD : 주어진 컬럼, 문자열에 임의의 문자열을 왼쪽 / 오른쪽에 덧붙여 길이 N의 문자열 반환
작성법 - LPAD(STRING, N, [STR]) / RPAD(STRING, N, [STR])
* N : 반환할 문자(열)의 길이(바이트), 원래 STRING의 길이보다 작다면 N만큼 잘라서 표시
* STR : 덧붙이려는 문자(열), 생략 시 공백문자
* 문자열을 통일감 있게 조회하고자 할 때 주로 사용함
// 주민등록번호 뒷자리를 *로 표시하시오.
SELECT EMP_NAME, RPAD(SUBSTR(EMP_NO, 1, 8), 14, '*')
FROM EMPLOYEE;
- STRIM / RTRIM : 주어진 컬럼, 문자열의 왼쪽 / 오른쪽에서 지정한 STR에 포함된 모든 문자를 제거한 나머지 반환
작성법 - LTRIM(STRING, STR) / RTRIM(STRING, STR)
// 사원들의 010을 제외한 폰번호와 아이디를 구하시오.
SELECT EMP_NAME, LTRIM(PHONE, '010'), RTRIM(EMAIL, '@yh.or.kr')
FROM EMPLOYEE;
- TRIM : 주어진 컬럼, 문자열의 앞 / 뒤 / 양쪽에 있는 지정한 문자를 제거한 나머지 반환
작성법 - TRIM( LEADING | TRAILING | BOTH [CHAR] FROM STRING)
* CHAR : 제거하려는 문자(열), 생략 시 공백문자
SELECT TRIM(LEADING 'Z' FROM 'ZZZYHZZZ')
FROM DUAL;
// 'KHZZZ'
SELECT TRIM(TRAILING 'Z' FROM 'ZZZYHZZZ')
FROM DUAL;
// 'ZZZKH'
SELECT TRIM(BOTH 'Z' FROM 'ZZZYHZZZ')
FROM DUAL;
// 'YH'
- SUBSTR : 컬럼이나 문자열에서 지정한 위치부터 지정한 개수의 문자열을 잘라내어 반환
작성법 - SUBSTR( STRING, POSITION, [LENGTH] )
* POSITION : 문자열을 잘라낼 위치로 양수면 시작방향에서 지정한 수만큼, 음수면 끝 방향에서 지정한 수만큼의 위치 의미
* LENGTH : 반환할 문자 개수 (생략 시 문자열의 끝까지 의미, 음수면 NULL 리턴)
SELECT SUBSTR('SHOWMETHEMONEY', 7) -- 7번째부터 끝까지 추출
FROM DUAL;
// THEMONEY
SELECT SUBSTR('SHOWMETHEMONEY', 5, 2) -- 5번째부터 2글자 추출
FROM DUAL;
// ME
SELECT SUBSTR('SHOWMETHEMONEY', -8, 3) -- 뒤에서 8번째부터 3글자 추출
FROM DUAL;
// THE
- LOWER / UPPER / INITCAP : 컬럼의 문자 혹은 문자열을 소문자 / 대문자 / 첫 글자만 대문자로 변환하여 반환
작성법 - LOWER(STRING) / UPPER(STRING) / INITCAP(STRING)
SELECT LOWER('Welcome To My World!')
FROM DUAL;
// welcome to my world!
SELECT UPPER('Welcome To My World!')
FROM DUAL;
// WELCOME TO MY WORLD!
SELECT INITCAP('welcome to my world!')
FROM DUAL;
// Welcome To My World!
- CONCAT : 컬럼의 문자 혹은 문자열을 두 개 전달 받아 하나로 합친 후 반환
작성법 - CONCAT(STRING, STRING)
SELECT CONCAT('가나다라', 'ABCD')
FROM DUAL;
// 가나다라ABCD
- REPLACE : 컬럼의 문자 혹은 문자열에서 특정 문자(열)을 지정한 문자(열)로 바꾼 후 반환
작성법 - REPLACE(STRING, STR1, STR2)
* STR1 : 변경하려고 하는 문자 혹은 문자열
* STR2 : 변경하고자 하는 문자 혹은 문자열
SELECT REPLACE('서울시 강남구 역삼동', '역삼동', '삼성동')
FROM DUAL;
// 서울시 강남구 삼성동
'Study' 카테고리의 다른 글
[Oracle/오라클] 함수 (형변환 / NULL / 선택 / 그룹) (0) | 2022.12.29 |
---|---|
[Oracle/오라클] 숫자 처리 함수 / 날짜 처리 함수 (0) | 2022.12.29 |
[Oracle/오라클] DML(SELECT) (0) | 2022.12.12 |
[JAVA/자바] 네트워크 (Network) (0) | 2022.12.12 |
[JAVA/자바] 컬렉션 (Collection) (1) | 2022.12.05 |