dual 테이블
오라클에서 자체적으로 제공해주는 테이블
간단하게 함수를 이용해서 계산, 결과값을 확인할 때 사용하는 테이블
오직 한 행, 한 컬럼 만을 담고 있는 테이블
사용 용도 : 특정 테이블을 생성할 필요없이 함수 또는 계산을 하고자 할 때 사용됨
오라클에서 제공해주는 함수들
1. 날짜와 관련된 함수들
1) 현재 시스템의 날짜를 구해오는 함수 : sysdate
-- 현재날짜, 어제날짜, 내일날짜 화면에 표시하기
select sysdate "현재 날짜", sysdate-1 "어제 날짜", sysdate+1 "내일 날짜"
from dual;
2) 몇 개월 이후의 날짜를 구하는 함수
형식) add_months(현재날짜, 숫자(개월 수))
select add_months(sysdate,4) as "4개월 뒤의 날짜" from dual;
3) 다가올 날짜(요일)을 구해 주는 함수 : next_day()
-- 형식)next_day(현재 날짜,'요일')
select next_day(sysdate, '수요일') as "다가올 수요일"
from dual;
4) 달의 마지막 날을 구해주는 함수 : last_day()
select last_day(sysdate) "이번달의 마지막 날짜" from dual;
5) 두 날짜 사이의 개월 수 차이를 구하는 함수 : months_between()
select empno, ename, hiredate, sysdate,
months_between(sysdate, hiredate) as "개월 수 차이"
from emp;
★ 6) 형식에 맞게 문자열로 날짜를 출력하는 함수 : to_char()
-- 형식) to_char(날짜, '날짜형식')
SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD') "YYYY/MM/DD" FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'MM/DD/YYYY') "MM/DD/YYYY" FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') "YYYY-MM-DD" FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YY-MM-DD') "YY-MM-DD" FROM DUAL;
2. 문자와 관련된 함수들
1) 대문자, 소문자를 바꾸어주는 함수 : upper(), lower(), indicap()
-- upper() : 소문자를 대문자로 바꾸어주는 함수
-- lower() : 대문자를 소문자로 바꾸어주는 함수
-- indicap() : 첫 글자는 대문자로, 나머지 문자는 소문자로 바꾸어 주는 함수
select ename, upper(ename), lower(ename), initcap(ename)
from emp;
2) 문자열의 길이를 구해주는 함수 : length()
--emp 테이블에서 이름이 5자 이상인 직원의 이름, 이름의 길이를 화면에 표시하시오
select ename, length(ename) from emp
where length(ename) >=5;
3) 문자열 일부를 추출하는 함수 : substr()
-- 형식) substr("문자열", 시작위치, 추출할 문자 길이)
-- 시작위치가 음수인 경우에는 오른쪽부터 시작이 된다.
select substr('ABCDEFG', 3, 2) from dual; -- CD
select substr('ABCDEFG', -3, 2) from dual; -- EF(끝에서 3번째부터 2개 문자열 추출)
select substr('ABCDEFG', 2) from dual; -- 두번째 문자열부터 출력
--[문제] emp테이블에서 직원들의 이름과 입사'년도'만 추출하여 화면에 보여주세요
select ename, substr(hiredate, 0, 2) as "입사년도" from emp;
date_type이 date인 데이터에도 strsub이 될까?
잘 된다.
4) 문자열을 연결하는 함수 : concat()
select concat('안녕','하세요?') from dual;
문자열을 연결하는 연산자 : ||
select '방가' || '방가' from dual;
-- [문제1] emp 테이블에서 결과가 아래와 같이 나오도록 화면에 보여주세요
-- 결과) 'SCOTT의 담당업무는 ANALST 입니다.'
SELECT CONCAT(CONCAT(ename, '의 담당업무는 '),CONCAT(job, ' 입니다.'))
FROM emp
WHERE ename = 'SCOTT';
5) 자릿수를 늘려주는 함수
-- 왼쪽 자릿수를 늘려주는 함수 : lpad()
-- 형식) LPAD('문자열', 전체 자릿수, '늘어난 자릿수에 들어갈 문자열')
SELECT LPAD('ABCDEFG', 15, '*') FROM DUAL;
-- 오른쪽 자릿수를 늘려주는 함수 : rpad()
-- RPAD('문자열', 전체 자릿수, '늘어난 자릿수에 들어갈 문자열')
select rpad('ABCDEFG',14,'*') from dual;
6) 문자를 지워주는 함수
-- 왼쪽 문자를 지워주는 함수 : LTRIM()
SELECT LTRIM('ABCDEFG', 'A') FROM DUAL;
-- 오른쪽 문자를 지워주는 함수 : RTRIM()
SELECT RTRIM('ABCDEFG', 'FG') FROM DUAL;
7) 문자열을 교체해주는 함수 : replace()
-- 형식) replace('원본 문자열', '교체될 문자열', '새로운 문자열');
select replace('Java program', 'JAVA', 'JSP') from dual;
-- [문제] member10 테이블에서 주소에 '서울시'로 된 정보를 '서울특별시'로 바꾸어 화면에 출력
select replace(addr, '서울시', '서울특별시') from member10;
본래 데이터값이 변경될까?
본래 데이터값은 변경되지 않았음을 볼 수 있다.
'Back-End > Database' 카테고리의 다른 글
[SQL] view (0) | 2021.10.05 |
---|---|
[SQL] 숫자 관련 기본 함수 (0) | 2021.10.05 |
[SQL] JOIN (0) | 2021.10.05 |
[SQL] 시퀀스(sequence) (0) | 2021.10.05 |
[SQL] 그룹함수 (avg, count , max, min, sum) (0) | 2021.10.04 |
댓글