본문 바로가기

Oracle Data Base

[SQL Plus] DUAL 테이블, SQL 함수(문자,숫자,날짜) 정리

1. DUAL 테이블

DUAL : 오라클의 기본적인 테이블, 일반유저가 사용 가능한 테이블

         계산식이나 함수를 쓸 때 사용

형식) select 함수명(처리할값) from DUAL;

SQL> select length('abcde') from DUAL;

 

2. 문자 함수 - LOWER, UPPER, SUBSTR, LENGTH

[ LOWER, UPPER, LENGTH ]

Q1. emp 테이블에서 사원의 ename 길이가 5이상인 사원을 검색해서

그 사원의 empno,ename,job 순으로 출력하시오.

SQL> select empno,LOWER(ename) 소문자로,UPPER(job) 대문자로

        from emp where LENGTH(ename)>=5;

 

[ SUBSTR(대상_문자열,시작위치,뽑아낼_문자열_개수) ]

SQL> select SUBSTR('oracletest',1,6) from dual;

결과> oracle

Q2. emp 테이블에서 ename의 첫글자가 K보다 크고 Y보다 작은

사원을 검색해서 그 사원의 empno,ename,job 순으로 출력하시오

(단, 이름순으로 정렬하시오)

SQL> select empno,ename,job from emp

        where SUBSTR(ename,1,1)>'K' and SUBSTR(ename,1,1)<'Y'

        order by ename;

 

3. 숫자 함수 - ROUND, TRUNC, MOD

[ ROUND - 반올림 ]

SQL> select ROUND(4567.678),ROUND(4567.678,0),ROUND(4567.678,2),

        ROUND(4567.678,-2) from dual;

결과>   4568              4568           4567.68               4600

 

[ TRUNC - 버림 ]

SQL> select TRUNC(12.345,2), TRUNC(34.567,0), TRUNC(56.789),

        TRUNC(78.901,-1) from dual;

결과>  12.34              34            56               70

 

[ MOD - 나머지 ]

SQL> select MOD(34,2), MOD(34,5), MOD(34,7) from dual;

결과>       0          4          6

 

4. 날짜 함수 - SYSDATE, MONTHS_BETWEEN, ADD_MONTHS, NEXT_DAY, LAST_DAY

SYSDATE : 시스템에 저장된 현재 날짜

[ MONTHS_BETWEEN - 두 날짜 사이의 개월 수 ]

SQL> select ename,hiredate,MONTHS_BETWEEN(sysdate,hiredate) 
근무일수 from emp where deptno=10 order by 근무일수 desc;

결과>  ENAME      HIREDATE   근무일수
           ---------- -------- ----------
          CLARK      81/06/09 456.536345
           KING       81/11/17  451.27828
          MILLER     82/01/23 449.084732

 

[ ADD_MONTHS - 지정_날짜 + 개월_수 ]

SQL> select ADD_MONTHS(sysdate,5) "5개월후" from dual;

결과> 5개월후
         --------
        19/11/25

 

[ NEXT_DAY - 지정날짜의 돌아오는 요일의 날짜를 반환 ]

SQL> select NEXT_DAY(sysdate,'화요일') from dual;

결과> NEXT_DAY
           --------
          19/07/02

 

[ LAST_DAY - 해당 달의 마지막 날짜를 반환 ]

SQL> select ename,hiredate,LAST_DAY(hiredate)-hiredate "근무일수"
        from emp where ename like '_A%' order by 3 desc;

결과> ENAME      HIREDATE   근무일수
         ----------     --------     ----------
          JAMES      81/12/03         28
         WARD       81/02/22          6
         MARTIN     81/09/28          2