함수 FUNCTION
전달된 컬럼값을 읽어들여서 함수를 실행한 결과를 반환함
- 단일행 함수 : N개의 값을 읽어들여서 N개의 결과값 반환 (매 행마다 함수 실행결과 반환)
- 그룹 함수 : N개의 값을 읽어들여서 1개의 결과값을 반환 (그룹을 지어 그룹별로 함수 실행 결과 반환)
>> SELECT절 단일행 함수와 그룹함수 함께 기술 못함
=> 결과 행의 갯수가 다르기 때문에 같이 쓸 수 없음
>> 함수식을 기술할 수 있는 위치 : SELECT절, WHERE절, ORDER BY절, GROUP BY절, HAVING절, DML문
< 단일행 함수>
1. 문자 처리 함수
* LENGTH / LENGTHB => 결과값 NUMBER 타입
LENGTH('문자열값'| 컬럼명) : 해당 문자열 값의 글자수를 반환
LENGTHB('문자열값' | 컬럼명) : 해당 문자열값의 바이트 수를 반환
'강' '나' 'ㄱ' 한글 한글자당 3BYTE
영문자, 숫자, 특수문자 한글자당 1BYTE
SELECT EMP_NAME, LENGTH(EMP_NAME),LENGTHB(EMP_NAME)
FROM EMPLOYEE;
* INSTR
문자열로부터 특정 문자의 시작위치를 찾아서 반환
INSTR(컬럼 | '문자열값', '찾고자하는문자', [찾을 위치의 시작값, [순번]]) => 결과값 NUMBER타입
>>찾을 위치의 시작값
1 : 앞에서부터 탐색
-1 : 뒤에서부터 탐색
SELECT INSTR('AABAACAABBAA', 'B',-1) -- 뒤에서부터 탐색 (찾을위치는 앞에서부터 세서 10 조회됨)
FROM DUAL;
>> 출력결과 : 10
SELECT INSTR('AABAACAABBAA', 'B',1,2) -- 9
FROM DUAL;
>>출력결과 9
SELECT EMAIL ,INSTR(EMAIL, '_',1,1)" _위치",INSTR(EMAIL,'@')"@위치"
FROM EMPLOYEE;
>>출력결과
* SUBSTR
문자열에서 특정 문자열을 추출해서 반환(자바에서의 substring()메소드와 유사)
SUBSTR(STRING, 시작위치값(POSITION),[글자수(LENGTH)]) => 결과값이 CHARACTER타입
-STRING : 문자타입의 컬럼, 또는 '문자열값'
-POSITION : 문자열을 추출할 시작위치값 (음수값도 제시가능)
-LENGTH : 추출할 문자개수 (생략시 끝까지 의미)
SELECT SUBSTR('SHOWMETHEMONEY',7) FROM DUAL; --THEMONEY
SELECT SUBSTR('SHOWMETHEMONEY',5,2) FROM DUAL; --ME
SELECT SUBSTR('SHOWMETHEMONEY',1,6) FROM DUAL; --SHOWME
SELECT SUBSTR('SHOWMETHEMONEY',-8,3) FROM DUAL; --THE
SELECT EMP_NAME, EMAIL, SUBSTR(EMAIL,1,INSTR(EMAIL,'@')-1)"ID"
FROM EMPLOYEE;
>>출력결과
* LPAD / RPAD
문자열에 특정 문자를 왼쪽 또는 오른쪽에 붙일때 사용
LPAD/ RPAD(STRING, 최종적으로 반환할 문자의 길이(N), [덧붙이고자하는 문자]) --> 결과값은 CHARACTER타입
문자열에 덧붙이고자하는 문자를 왼쪽 또는 오른쪽에 덧붙여서 최종 N길이 만큼의 문자열을 반환
> 덧붙이고자하는 문자열 생략시 기본값 공백
SELECT EMP_NAME,LPAD(EMAIL,20) -- 덧붙이고자하는 문자 생략시 기본값 공백
FROM EMPLOYEE;
예시) 주민번호 성별자리 이후 *로 채우기 -> 총 글자수 14 글자
SELECT EMP_NAME,RPAD(SUBSTR(EMP_NO,1,8), 14 ,'*')
FROM EMPLOYEE;
* LTRIM / RTRIM
문자열에서 특정 문자를 제거한 나머지를 반환
LTRIM / RTRIM (STRING,[제거하고자하는 문자들]) -> 결과값은 CHARACTRER타입
SELECT LTRIM('ACABACCBR','ABC') FROM DUAL;
>>출력결과 R
* TRIM
문자열의 앞/뒤/양쪽에 있는 지정한 문자들을 제거한 나머지 반환
TRIM( [LEADING|TRAILING|BOTH] 제거하고자하는 문자들 FROM STRING )
SELECT TRIM(LEADING 'Z' FROM 'ZZZBRZZZ') FROM DUAL; --LEADING :앞 => LTRIM -- BRZZZ
SELECT TRIM(TRAILING 'Z' FROM 'ZZZBRZZZ') FROM DUAL; --TRAILING : 뒤 => RTRIM --ZZZBR
SELECT TRIM(BOTH 'Z' FROM 'ZZZBRZZZZ') FROM DUAL; -- BOTH : 양쪽 => 생략시 기본값 -- BR
* LOWER / UPPER / INITCAP
LOWER/ UPPER/ INITXAP(STRING) => 결과값은 CHARACTER타입
LOWER : 다 소문자로 변경
UPPER : 다 대문자로 변경
INITCAP : 단어 앞글자마다 대문자로 변경
* CONCAT
문자열 두개 전달받아 하나로 합친 결과 반환
CONCAT(STRING, STRING) => 결과값 CHARACTER 타입
SELECT CONCAT('가나다','ABC') FROM DUAL;
SELECT '가나다'||'ABC' FROM DUAL;
** 세개이상의 문자열 합치고자할때에는 연결연산자를 사용해야함
* REPLACE
문자열 출력시 대체할 문자열 전달받아 그 값으로 변경
REPLACE(STRING, STR1, STR2) => 결과값 CHARACTER 타입
SELECT EMP_NAME, REPLACE(EMAIL,'br.com','gmail.com')
FROM EMPLOYEE;
'ORACLE' 카테고리의 다른 글
ORACLE 02. SELECT(함수) _ 단일행 함수_ 형변환 함수 (0) | 2022.11.16 |
---|---|
ORACLE 02. SELECT(함수) _ 단일행 함수_날짜처리함수 (0) | 2022.11.15 |
ORACLE 02. SELECT(함수) _ 단일행 함수_숫자처리함수 (0) | 2022.11.15 |
ORACLE_01. SELECT문(기본문법 2) (0) | 2022.11.15 |
ORACLE_ 01.SELECT문 (기본문법 1) (0) | 2022.11.14 |