함수 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;

 

복사했습니다!