ASCII
- 문자의 정수형 값 반환
INSTR
- 문자열에서 몇번째에 있는 문자인지 반환
예시1
예시2
이메일에서 우선 '@골뱅이'의 위치를 찾고 그 이후에 나오는 'dot(점 . )' 의 인덱스를 반환
SUBSTR
- 문자열을 잘라내어 반환
예시1
이름의 첫글자를 반환
예시2 - 여성 서교동에사는 여성직원들의 정보를 출력
INSTR 함수로 주민번호 가운데 있는 '대시(-)'의 인덱스를 반환받고
SUBSTR 함수로 '대시(-)'의 인덱스부터 1글자 (뒷자리 첫번째)가 2 또는 4라면 여자
SELECT e.jumin, e.ename 사원이름 , m.ename 관리자이름,
e.email 사원이메일, m.email 관리자이메일, e.dno,
d.dname, (e.salary +e.COMM)*12
FROM emp m, emp e, dept d
WHERE (SUBSTR(e.jumin, INSTR(e.jumin,'-')+1, 1) in ('2','4')) AND d.DLOC LIKE '%서교동%'
AND m.eno = e.mgr AND e.dno = d.dno ORDER by e.dno, e.ename;
REPLACE
- '문자열1'에서 '문자열2'의 글자를 '문자열3'으로 바꿔라
LPAD
- 문자열을 자릿수 만큼 공간을 잡아 오른쪽에 정렬하여 출력하고 나머지 왼쪽 빈칸은 채울글자로 채웁니다.
RPAD
- 문자열을 자릿수 만큼 공간을 잡아 왼쪽 정렬하여 출력하고 나머지 오른쪽 빈칸은 채울글자로 채웁니다.
예시1 - 이름의 첫 글자를 출력하여 나머지는 * 로 마스킹
SELECT RPAD(SUBSTR(ename,1,1),LENGTH(ename),'*') FROM emp;
예시2 -아래와 같이 출력하는데 주민번호는 마스킹 처리하라
select e.eno, e.ename, SUBSTR(e.email, 1, INSTR(e.email, '@') -1) id,
rpad(SUBSTR(e.jumin, 1, 8) , 14, '*') jumin,
LPAD(e.salary+e.comm , 10, 0 ) salary
FROM emp e, emp m
WHERE e.mgr = m.eno AND
e.ename ='김한희'
ORDER BY e.salary + e.comm DESC, e.ename;
날짜 관련 함수
to_date(char, datetime) | 문자열 데이터를 날짜형으로 반환 TO_DATE ('2014-02-14', 'yyyy-mm-dd') = 2014-02-14 |
TO_CHAR (date, datetime) | 날짜형 데이터를 문자열로 반환 TO_CHAR (TO_DATE ('2014-02-14', 'yyyy-mm-dd')) = 20140214 |
ADD_MONTHS(date, 숫자) | date형의 날짜에서 지정한 만큼 더함 (1 : 다음달, -1: 이전달) |
LAST_DAY(date) | date형의 날짜에서 월의 마지막 날을 반환 LAST_DAY(TO_DATE('2014-02-14', 'yyyy-mm-dd')) = 2014-02-28 |
SYSDATE | 시스템 상의 오늘 날짜를 반환 |
SYSDATE
예시 - 어제, 오늘 내일
TO_CHAR
TO_CHAR (날짜, 형식 문자)
TO_CHAR (TO_DATE ('2014-02-14', 'yyyy-mm-dd')) = 20140214
년 : yyyy / yy
월 : mm
일: dd
요일 : d ('3' 출력, 화요일 = 3)
요일 : day ('화요일' 출력)
요일 약어 : dy ('화' 출력)
시: hh
분: mi
초: ss
- 날짜형 데이터를 문자열로 반환
사용 예시들
SELECT TO_CHAR(SYSDATE, 'yyyy') FROM dual; // 2022
SELECT TO_CHAR(SYSDATE, 'yy') FROM dual; // 22
SELECT TO_CHAR(SYSDATE, 'mm') FROM dual; // 01
SELECT TO_CHAR(SYSDATE, 'dd') FROM dual; // 일
SELECT TO_CHAR(SYSDATE, 'hh') FROM dual; // 시
SELECT TO_CHAR(SYSDATE, 'mi') FROM dual;
SELECT TO_CHAR(SYSDATE, 'ss') FROM dual;
SELECT TO_CHAR(SYSDATE, 'yyyy-mm') FROM dual;
SELECT TO_CHAR(SYSDATE, 'yyyymm') FROM dual;
SELECT TO_CHAR(SYSDATE, 'yyyy-ss') FROM dual;
TO_DATE
- 문자열 데이터를 날짜형으로 반환
ADD_MONTHS
ADD_MONTH (날짜, 숫자)
- 날짜에 숫자 개월수 만큼 더해 반환
LAST_DAY
LAST_DAY(날짜)
- 이달의 마지막 날을 반환
MONTHS_BETWEEN
- 두 날짜 사이의 개월 수를 반환
MONTHS_BETWEEN (최근 날짜1, 올드 날짜2)
DECODE 함수
DECODE(컬럼, 값1, 결과1, 값2, 결과2, 결과3)
컬럼의 값이 값1이면 결과1를 반환
컬럼의 값이 값2이면 결과2를 반환
그 나머지이면 결과 3을 반환
문제
같은 성씨찾기
SELECT SUBSTR(eNAME,1,1), COUNT(*) FROM emp
GROUP BY SUBSTR(eNAME,1,1);
상관 서브 쿼리 사용해서 나이 구하기
상관 서브 쿼리가 사용된 부분은 3번째 줄에서 사용.
왜 사용했냐면 속성 값으로 조건에 따라 1900을 더할 수도 있고, 2000을 더할 수도 있도록 하기 위해서
상관 서브 쿼리문을 사용
SELECT eno, ename, jumin,
TO_CHAR(SYSDATE, 'yyyy') - (SUBSTR(jumin, 1, 2) +
(SELECT DECODE( SUBSTR(jumin,8,1), '1',1900, '2',1900, 2000)
FROM emp e2 where e1.eno = e2.eno)) age
FROM emp e1;
테이블 복사하기
CREATE TABLE 새테이블명 AS SELECT * FROM 복사할테이블명
tip
집계함수 사용시 주의점
- NULL + 숫자 = NULL
- NULL 은 집계함수 실행 시 포함되지 않음
- count는 만족하는 레코드의 값이 없으면 0을 반환
- sum, avg는 값이 없으면 null을 반환
반응형
'개발 > 교육' 카테고리의 다른 글
(데이터베이스)24일차 (0) | 2022.04.28 |
---|---|
(데이터베이스)23일차 (0) | 2022.04.27 |
(데이터베이스)21일차 (0) | 2022.04.25 |
(데이터베이스)20일차 (0) | 2022.04.22 |
(데이터베이스)19일차 (0) | 2022.04.21 |
댓글