함수(Function)에 대하여

2024. 12. 17. 13:44·Back End/DataBase

⭐️ 함수란 ?

 

 

<함수 FUNCTION>
	 전달된 컬럼값을 읽어들여서 함수를 실행한 결과를 반환
	 
	- 단일행 함수 : N개의 값을 읽어들여서 N개의 결과값을 리턴(매행마다 함수실행결과를 반환)
	- 그룹 함수 : N개의 값을 읽어들여서 1개의 결과값을 리턴(그룹을 지어 그룹별로 함수 실행결과를 반환)
	
	>> SELECT 절에 단일행 함수와 그룹함수를 함께 사용하지 못한다.
	Why? -> 결과 행의 갯수가 서로 다르기 때문이다.
	
	>> 함수식을 사용할 수 있는 위치 : SELECT절, WHERE절, ORDER BY절, GROUP BY절 , HAVING절

 

✨ 자주 사용하는 함수를 알아보자

 

⭐️  함수 (FUNCTION)

<함수 FUNCTION>
전달된 컬럼값을 읽어들여서 함수를 실행한 결과를 반환
	 
- 단일행 함수 : N개의 값을 읽어들여서 N개의 결과값을 리턴(매행마다 함수실행결과를 반환)
- 그룹 함수 : N개의 값을 읽어들여서 1개의 결과값을 리턴(그룹을 지어 그룹별로 함수 실행결과를 반환)
	
>> SELECT 절에 단일행 함수와 그룹함수를 함께 사용하지 못한다.
Why? -> 결과 행의 갯수가 서로 다르기 때문이다.
	
>> 함수식을 사용할 수 있는 위치 : SELECT절, WHERE절, ORDER BY절, GROUP BY절 , HAVING절

 

⭐️  문자 처리 함수

  <문자 처리 함수>
 *LENGTH(컬럼 | '문자열') : 해당 문자열의 글자수를 반환
 *LENGTHB(컬럼 | '문자열') : 해당 문자열의 바이트 수를 반환
 	 
 '최' '나' 'ㄱ' 한글은 글자당 3BYTE 고정
 영문자, 숫자, 특수문자 글자당 1BYTE 고정
SELECT LENGTH ('오라클'), LENGTHB('오라클')
FROM DUAL;

SELECT LENGTH ('ORACLE'), LENGTHB('ORACLE')
FROM DUAL;

SELECT EMP_NAME , LENGTH(EMP_NAME), LENGTHB(EMP_NAME),
	EMAIL, LENGTH(EMAIL) , LENGTHB(EMAIL)
FROM EMPLOYEE e ;

 

⭐️  INSTR 함수

*INSTR
 문자열로부터 특정 문자의 시작위치를 찾아서 반환
  
 INSTR(컬럼 | '문자열', '찾고자하는 문자' , ['찾을 위치의 시작값', 순번]) -> 결과는 NUMBER로 나옴

 

SELECT INSTR ('AAAAACAAABBAA', 'B')
FROM DUAL;
-- 찾을 위치의 시작값 : 1 , 순번 : 1 -> 기본값

SELECT INSTR ('AAAAACAAABBAA', 'B', 1) 
FROM DUAL;

SELECT INSTR ('ABAACAAABBAA', 'B', -1)  -- 뒤에서부터 찾지만 읽을 때는 원래대로 읽어준다 
FROM DUAL;

SELECT INSTR ('BAAACAAABBAA', 'B',1, 2) 
FROM DUAL;

SELECT INSTR ('BAAACAAABBAA', 'B', 1, 3) 
FROM DUAL;

SELECT EMAIL, INSTR(EMAIL, '_') AS "LOCATION" ,INSTR(EMAIL, '@') AS "@위치"
FROM EMPLOYEE;

 

 

⭐️  SUBSTR 함수

*SUBSTR / 자주사용
문자열에서 특정 문자열을 추출해서 반환
	
[표현법]
SUBSTR(컬럼 | '문자열' , 추출한 시작 위치 , [추출문자 갯수])
SELECT SUBSTR('SHOWMETHEMONEY',7) -- 7번째 위치부터 끝까지 
FROM DUAL;

SELECT SUBSTR('SHOWMETHEMONEY',5,2)  
FROM DUAL;

SELECT SUBSTR('SHOWMETHEMONEY',1, 6)  
FROM DUAL;

SELECT SUBSTR('SHOWMETHEMONEY', -8 , 3)  
FROM DUAL;

SELECT EMP_NAME , EMP_NO , SUBSTR(EMP_NO, 8 , 1) AS "성별"
FROM EMPLOYEE e ;

-- 사원들중 여사원들만 EMP_NAME과 , EMP_NO를 조회
SELECT EMP_NAME , EMP_NO , SUBSTR(EMP_NO, 8 , 1) AS "성별"
FROM EMPLOYEE e 
WHERE SUBSTR(EMP_NO, 8 , 1) = '2' OR SUBSTR(EMP_NO, 8 , 1) = '4'; 

-- 사원들중 남사원들만 EMP_NAME과 , EMP_NO를 조회
SELECT EMP_NAME , EMP_NO , SUBSTR(EMP_NO, 8 , 1) AS "성별"
FROM EMPLOYEE e 
WHERE SUBSTR(EMP_NO, 8 , 1) = '1' OR SUBSTR(EMP_NO, 8 , 1) = '3';

-- 함수 중첩사용 가능
-- 이메일 아이디부부만 추출
-- 사원목록에서 , 사원명, 이메일, 아이디 조회
SELECT EMP_NAME, EMAIL , SUBSTR(EMAIL, 1, INSTR(EMAIL,'@')-1)
FROM EMPLOYEE e ;

 

⭐️  LPAD / RPAD 함수

*LPAD /RPAD
문자열을 조회할 때 통일감있게 조회하고자 할 때 사용
	
[표현법]
LPAD / RPAD (STRING, 최종적으로 반환할 문자열의 길이, [덧붙이고자하는 문자])
-- 30만큼의 길이 중 EMAIL컬럼 값은 오른쪽으로 정렬하고 나머지 부분은 공백으로 채운다.
SELECT EMP_NAME , LPAD(EMAIL,30)
FROM EMPLOYEE;

SELECT EMP_NAME , LPAD(EMAIL,30,'#')
FROM EMPLOYEE;

SELECT EMP_NAME , RPAD(EMAIL,30, '#')
FROM EMPLOYEE;

-- 사원들의 사원명, 주민등록번호("123456-1XXXXXX")
--SELECT EMP_NO , RPAD(SUBSTR(EMP_NO,1,8),14,'X')
SELECT EMP_NO , SUBSTR(EMP_NO,1,8) || 'XXXXXXX'
FROM EMPLOYEE e ;

 

⭐️  LTRIM / RTRIM 함수

*LTRIM / RTRIM
문자열에서 특정 문자를 제거한 나머지를 반환
LTRIM / RTRIM(컬럼 | '문자열' , [제거하고자하는 문자들])
		
문자열의 왼쪽 혹은 오른쪽에서 제거하고자하는 문자들을 찾아서 제거한 나머지 문자열 반환
SELECT LTRIM('  K    H') FROM DUAL; -- 앞에서부터 다른 문자가 나올 때 까지 공백제거
SELECT RTRIM('  K    H') FROM DUAL;
SELECT LTRIM('123123KH123', '123') FROM DUAL; 
SELECT LTRIM('ACABACCAAKH', 'ABC') FROM DUAL; -- 제거하고자하는 문자는 문자열이 아닌 문자들

	*TRIM	
	문자열의 앞 / 뒤 / 양쪽에 있는 저장한 문자들을 제거한 나머지 문자열 반환
	TRIM([LEADING | TRALLING | BOTH] 제거하고자하는 문자열 FROM 문자열)
    
SELECT TRIM('  K  H   ') FROM DUAL;
SELECT TRIM(BOTH 'Z' FROM 'ZZZZZZZZZZZZAZZZZZZ') FROM DUAL;	 -- 양쪽
SELECT TRIM(LEADING'Z' FROM 'ZZZZZZZZZZZZAZZZZZZ') FROM DUAL; -- LTRIM 유사
SELECT TRIM(TRAILING'Z' FROM 'ZZZZZZZZZZZZAZZZZZZ') FROM DUAL; -- RTRIM 유사

 

⭐️  LOWER / UPPER / INITCAP 함수

*LOWER / UPPER / INITCAP
LOWER : 다 소문자로 변경한 문자열 반환
UPPER : 다 대문자로 변경한 문자열 반환
INITCAP : 띄어쓰기 기준 첫 글자마다 대문자로 변경한 문자열 반환
SELECT LOWER('Welcome To MY KH') FROM DUAL;

SELECT UPPER('Welcome To MY KH') FROM DUAL;

SELECT INITCAP('welcome to my kh') FROM DUAL;

 

⭐️  CONCAT 함수

*CONCAT
문자열 두개 전달받아서 하나로 합친 후 반환
CONCAT(STRING1, STRING2)
SELECT CONCAT('가나다', 'ABC') FROM DUAL;

SELECT '가나다' || 'ABC' FROM DUAL;

 

⭐️  REPLACE 함수

*REPLACE
특정문자열에서 특정부분을 다른 부분으로 교체
REPLACE(컬럼 | 문자열, 찾을 문자열, 변경할 문자열)
SELECT EMAIL , REPLACE(EMAIL,'C##SERVER', 'kh')
FROM EMPLOYEE e ;

 

⭐️  ABS 함수

<숫자처리함수>
*ABS
숫자의 절대값을 구해주는 함수
SELECT ABS(-10), ABS(-5.4) FROM DUAL;

 

⭐️ MOD 함수

*MOD
두 수를 나눈 나머지값을 반환MOD(NUMBER, NUMBER)
SELECT MOD(10,3) FROM DUAL;
SELECT MOD(10.9,3) FROM DUAL;

 

⭐️ ROUND 함수

*ROUND
반올림한 결과를 반환
ROUND(NUMBER , [위치(자리수)])
SELECT ROUND(123.656) FROM DUAL; -- 기본자수는 소수점 첫번째 자리에서 반올림
SELECT ROUND(123.656, 3) FROM DUAL; -- 양수로 증가할 수록 소수점 뒤로 한칸씩 이동
SELECT ROUND(123.656, -3) FROM DUAL; -- 음수로 감소할 수록 소수점 앞자리로 이동

 

⭐️ CEIL 함수

*CEIL
올림처리를 위한 함수
CELL(NUMBER)
SELECT CEIL (123.456) FROM DUAL;

 

⭐️ TRUNC / FLOOR 함수

TRUNC, FLOOR
버림처리 함수
	
TRUNC(NUMBER, [위치])
FLOOR(NUMBER)
SELECT TRUNC(123.952) FROM DUAL;
SELECT TRUNC(123.952, 1) FROM DUAL;
SELECT TRUNC(123.952, -1) FROM DUAL;

'Back End > DataBase' 카테고리의 다른 글

SQL 구문 순서에 대하여  (0) 2024.12.18
SELECT에 대하여  (0) 2024.12.17
DataBase를 배우며  (2) 2024.12.17
SQL Developer 와 SQL DBMS 란  (0) 2024.12.17
Mac SQL 및 SQL Developer 설치  (1) 2024.12.16
'Back End/DataBase' 카테고리의 다른 글
  • SELECT에 대하여
  • DataBase를 배우며
  • SQL Developer 와 SQL DBMS 란
  • Mac SQL 및 SQL Developer 설치
KoesJin
KoesJin
hEELo
  • KoesJin
    Seok DevLog
    KoesJin
  • 전체
    오늘
    어제
    • 분류 전체보기 (110)
      • Back End (31)
        • DataBase (15)
        • JAVA (12)
        • JDBC (4)
      • Front End (9)
        • HTML5 & CSS (3)
        • Java Script (6)
        • REACT (0)
      • Server (9)
        • JSP - TomCat - Servlet (7)
        • Spring Boot (2)
      • GitHub (1)
      • AWS (1)
      • IT 지식 (기술면접 대비) (20)
      • Weekly TIL (39)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    weekly til - day 40
    DDL
    weekly til - day 43
    weekly til - day 38
    MVC 패턴
    order by
    exception
    where
    from
    weekly til - day 41
    INNER JOIN
    DAO
    순서에 대하여
    GC
    commit
    weekly til - day 39
    dml
    css
    View
    select
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
KoesJin
함수(Function)에 대하여
상단으로

티스토리툴바