본문 바로가기
Back-End/Database

[SQL] dual 테이블/ 기본 함수_1(날짜 관련 / 문자 관련)

by 찐코딩 2021. 10. 5.

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

댓글