⭐️ 함수란 ?
<함수 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 |