basic/sql

SQL[04] - 함수 (문자함수, 숫자함수, 날짜함수)

못지(Motji) 2021. 5. 28. 23:55

*오라클 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 : 중복 제거