*오라클 oracle 기준
SQL 함수
단일행 함수
• 한번에 한개의 행에 대한 처리를 한번 해주는 함수
• 한개행의 데이터받아 실행 ▸ 한개의 결과
• 종류 : 문자함수, 숫자함수, 날짜함수, 일반함수, 변환함수 ⋯
복수행 함수 (그룹함수)
• 한번에 여러개의 행에대한 처리를 한번 해주는 함수
• 여러행의 데이터를 받아 함수 실행 ▸ 한개의 결과
• 종류 : COUNT, SUM, AVG, MAX, MIN ⋯
💡 dual : 가상의 테이블
원하는 값을 보고싶은데 기존의 테이블이외에 가상의 테이블을 만들어 조회 가능하다.
Ex) FROM dual > 기존의 테이블명 쓰는것과 똑같이 작성해주면 됨
문자함수
| 함수 | 설명 |
| LOWER('문자') | 소문자로 변경 |
| UPPER('문자') | 대문자로 변경 |
| LENGTH('문자') | 문자열의 길이, 문자수 |
| LENGTHB('문자') | 문자열의 길이 바이트값으로 출력 |
| CONCAT('문자','문자') | 문자열 연결 |
| SUBSTR('문자', IDX1, 개수) | IDX1 번째에서 개수만큼 문자열 출력 |
| LPAD('ORG문자', LENGTH, '삽입문자') | ORG문자의 길이를 변경하고 부족한 길이만큼 ORG문자 앞에 삽입문자 채워주기 |
| RPAD('ORG문자', LENGTH, '삽입문자') | ORG문자의 길이를 변경하고 부족한 길이만큼 ORG문자 뒤에 삽입문자 채워주기 |
| LTRIM('ORG문자', '삭제할문자') | ORG문자 왼쪽 부분에 있는 삭제할문자 지워주기 |
| RTRIM('ORG문자', '삭제할문자') | ORG문자 오른쪽 부분에 있는 삭제할문자 지워주기 |
| REPLACE('ORG문자','OLD','NEW') | 문자 변경해주기, ORG문자에서 OLD문자 NEW로 대치해주기 |
| INSTR('문자','특정문자') | 특정문자의 순서 알고 싶을때, 문자안에 있는 특정문자의 순서 알려줌 |
| REGEXP_REPLACE | 정규표현식 |
⌨ LOWER, UPEER 함수
SELECT ENAME, LOWER(ENAME) "LOWER", UPEER(ENAME)
FROM EMP;
-- EMP 테이블에 있는 ENAME과 소문자로 문자 변경한 ENAME 컬럼별칭은 LOWER
-- ENAME 컬럼 대문자로 변환하여 출력
⌨ LENGTH 함수, LENGTHB 함수
∙ 문자열의 길이, 문자수 구할때 사용
∙ LENGTHB : 문자열의 길이 바이트값으로 출력
SELECT ENAME, LENGTH(ENAME), LENGTHB(ENAME)
FROM EMP;
-- EMP 테이블에서 ENAME, ENAME 데이터의 문자열길이, ENAME 데이터의 문자열 길이 바이트 값으로 출력하기
-- 알파벳은 1BYTE라서 차이 없이 출력된다.
-- 한글은 글자당 2BYTE
⌨ SUBSTR 함수
SELECT SUBSTR('abcde', 3, 2) FROM dual; -- dual 가상의 테이블 (아무것도 없음)
-- 문자열 abcde에서 세번째 인덱스에 있는 문자부터 두개 문자 가져오기
-- cd가 출력됨
⌨ LPAD 함수, RPAD 함수
∙ 문자열 원하는 길이만큼 늘리고 부족한 길이만큼 원하는 숫자나 문자로 채워서 출력할 수 있다.
SELECT name, id, lpad(id, 10, '*')
FROM student
WHERE deptno1 = 201;
-- STUDENT 테이블의 DEPTNO이 201인 칼럼의
-- NAME, ID, ID칼럼의 값을 10으로 길이를 변경하고 부족한 길이만큼 *을 채워서 출력해라
숫자함수
입력되는 값이 숫자인 함수들을 말함
| 함수 | 설명 |
| ROUND(숫자, 소수점수) | 소수점 몇째자리까지 반올림 |
| TRUNC(숫자, 소수점수) | 소수점수까지 버리기 |
| MOD(숫자1, 숫자2) | 숫자1에서 숫자2 나눈 몫 |
| CEIL(숫자) | 소수점 있으면 무조건 올림 |
| FLOOR(숫자) | 소수점 있으면 무조건 내림, 앞에 정수만 남기기 |
| POWER(숫자1, 숫자2) | 숫자1의 숫자2의승을 출력 (3, 2) > 9 |
날짜함수**
| 함수 | 설명 |
| SYSDATE | 시스템의 현재 날짜와 시간 |
| MONTHS-BETWEEN | 두 날짜 사이의 월 수 |
| ADD_MODTHS | 달추가 |
| NEXT_DAY | 지정한 날짜 이후 지정한 요일이 처음 도래하는 날짜 |
| LAST_DAY | 주어진 date가 포함된 월의 마지막 날짜를 반환 |
| ROUND | 날짜를 가장 가까운 월 또는 연도로 반올림 |
| TRUNC | 타임스탬프를 절사하여 날짜를 반환 |
날짜 계산
* 날짜 + 숫자 = 날짜 EX) 7/20+3 = 7월 23일
* 날짜 - 숫자 = 날짜 EX) 7/20-3 = 7월 17일
* 날짜 - 날짜 = 숫자 EX) 7/20 - 7/15= 5
⌨ 날짜함수 사용해보기
입력한 날짜의 출력결과를 바로 보고싶어서 가상의 테이블을 사용했다. DUAL
SELECT SYSDATE FROM DUAL; --#1
-- MONTHS_BETWEEN(큰날짜, 작은날짜)
SELECT MONTHS_BETWEEN('21/04/03','21/02/28') FROM DUAL; --#2
SELECT MONTHS_BETWEEN('19/03/01','20/02/28') FROM DUAL; -- 윤달은 구분을 잘 못함 -- #3
-- ADD_MONTHS(기준날짜, 추가할 월수)
SELECT SYSDATE, ADD_MONTHS(SYSDATE, 1) FROM DUAL; --#4
-- NEXT_DAY(기준날짜, 돌아오는 요일)
SELECT SYSDATE, NEXT_DAY(SYSDATE, '월') FROM DUAL; --#5
-- LAST_DAY(기준날짜)
SELECT SYSDATE, LAST_DAY(SYSDATE), LAST_DAY('21/2/3') FROM DUAL; --#6
-- ROUND(날짜), TRUNC(날짜)
SELECT SYSDATE, ROUND(SYSDATE), TRUNC(SYSDATE) FROM DUAL; --#7
키워드 DISTINCT : 중복 제거
'basic > sql' 카테고리의 다른 글
| SQL[06] - 일반함수, 그룹함수, GROUP BY, HAVING절 (0) | 2021.05.31 |
|---|---|
| SQL[05] - 형변환 함수(숫자,문자,날짜 서로 형변환 하기), 오라클의 데이터 타입, 오라클 숫자 표현식 (0) | 2021.05.31 |
| SQL[03] - 연산자(비교, 논리, 조건) (0) | 2021.05.27 |
| SQL[02] - 데이터 조회하기, select 절 (0) | 2021.05.27 |
| SQL[01] - 테이블(table), 컬럼(column), 레코드(row) (0) | 2021.05.27 |



