본문 바로가기
SQL

[ORACLE] 기본 문법 2

by YOU R PLANET 2022. 1. 3.
ROUND 함수
        1) 특정 위치에서 반올림하기
        2) ROUND([숫자], [반올림 위치(선택)])
        3) 반올림 위치를 지정하지 않으면 소수점 첫 번째 자리에서 반올림이 수행된다.

사용 예시

SELECT 

       ROUND(1234.5678) AS ROUND,                   -- 소수점 첫째자리 반올림 //1234
       ROUND(1234.5678, 0) AS ROUND_0,              -- 소수점 첫째자리 반올림 //1234
       ROUND(1234.5678, 1) AS ROUND_0,              -- 소수점 둘째자리 반올림 //1234.6
       ROUND(1234.5678, 2) AS ROUND_0,              -- 소수점 셋째자리 반올림 //1234.57
       ROUND(1234.5678, -1) AS ROUND_MINUS1,        -- 자연수 첫째자리 반올림 //1230
       ROUND(1234.5678, -2) AS ROUND_MINUS2         -- 자연수 둘째자리 반올림  // 1200
FROM DUAL;


 TRUNC 함수
        1) 특정 위치에서 숫자 버리기
        2) TRUNC([숫자], [버림 위치(선택)])
        3) 반올림 위치를 지정하지 않으면 소수점 첫 번째 자리에서 버림 처리된다.

사용 예시

SELECT 

       TRUNC(1234.5678) AS TRUNC,  // 1234
       TRUNC(1234.5678, 0) AS TRUNC_0, //1234 
       TRUNC(1234.5678, 1) AS TRUNC_1, //1234.5
       TRUNC(1234.5678, 2) AS TRUNC_2, //1234.56
       TRUNC(1234.5678, -1) AS TRUNC_MINUS1, //1230
       TRUNC(1234.5678, -2) AS TRUNC_MINUS2  //1200
 FROM DUAL;

 


CEIL, FLOOR 함수
        1) CEIL  : 지정한 숫자와 가까운 큰 정수를 반환
        2) FLOOR : 지정한 숫자와 가까운 작은 정수를 반환
        3) CEIL([숫자]), FLOOR([숫자])

사용 예시

SELECT 

       CEIL(3.14), // 4
       FLOOR(3.14), // 3
       CEIL(-3.14),  // -3
       FLOOR(-3.14)  // -4
FROM DUAL;

 


MOD 함수
        1) 숫자를 나눈 나머지 값을 구하기
        2) MOD([나눗셈 될 숫자], [나눌 숫자])

사용 예시

SELECT 

       MOD(15, 6), // 3
       MOD(10, 2),  // 0
       MOD(11, 2)   // 1
FROM DUAL;

 


SYSDATE 함수
    : 오라클 데이터베이스 서버가 놓인 OS(Operator System:운영체제)의 현재 날짜와 시간 출력

사용 예시

SELECT

    SYSDATE
FROM DUAL;

 

실행화면

 


날짜 데이터의 연산
        1) 날짜 데이터 + 숫자 : 날짜 데이터보다 숫자만큼 일수 이후의 날짜
        2) 날짜 데이터 - 숫자 : 날짜 데이터보다 숫자만큼 일수 이전의 날짜
        3) 날짜 데이터 - 날짜 데이터    : 두 날짜 데이터 간의 일수 차이
        4) 날짜 데이터 + 날짜 데이터    : 연산 불가. 지원하지 않음(*)

사용 예시

SELECT 

       SYSDATE AS NOW, // 22/01/03
       SYSDATE - 1 AS YESTERDAY, // 22/01/02
       SYSDATE + 1 AS TOMORROW  // 22/01/04
FROM DUAL;

 


 ADD_MONTHS 함수
        1) 특정 날짜에 지정한 개월 수 이후 날짜 데이터를 반환
        2) ADD_MONTHS([날짜 데이터], [더할 개월 수])

사용 예시

SELECT 

       SYSDATE,
       ADD_MONTHS(SYSDATE, 3)
FROM DUAL;

 

[실습 3-2] 사원이 입사한 지 10주년이 되는 날짜 구하기
SELECT EMPNO, ENAME, 

HIREDATE, ADD_MONTHS(HIREDATE, 120) AS WORK10YEAR 

FROM EMP;

 

[실습 3-3] 입사한 지 35년(420개월)이 되지 않은 사원 출력하기
SELECT EMPNO, ENAME, HIREDATE, ADD_MONTHS(HIREDATE, 420), SYSDATE 

FROM EMP 
WHERE ADD_MONTHS(HIREDATE, 420) > SYSDATE;

 


MONTHS_BETWEEN 함수
        1) 두 날짜 간의 개월 수 차이 구하기
        2) MONTHS_BETWEEN([날짜 데이터1], [날짜 데이터2])

사용 예시

SELECT 

       SYSDATE,
       ADD_MONTHS(SYSDATE, 3)
FROM DUAL;

 

[실습 4-1] HIREDATE와 SYSDATE 사이의 개월 수를 MONTHS_BETWEEN 함수로 출력하기
SELECT EMPNO, ENAME, HIREDATE, SYSDATE,
       MONTHS_BETWEEN(HIREDATE, SYSDATE) AS MONTHS1,
       MONTHS_BETWEEN(SYSDATE, HIREDATE) AS MONTHS2,
       TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE)) AS MONTHS3 // 버림을 해줘야 함 
FROM EMP;

 


NEXT_DAY, LAST_DAY 함수
        1) NEXT_DAY
            - 입력한 날짜 데이터에서 돌아오는 요일의 날짜를 반환
            - NEXT_DAY([날짜 데이터], [요일 문자])
        2) LAST_DAY
            - 해당 날짜가 속한 달의 마지막 날짜를 반환
            - LAST_DAY([날짜 데이터])

사용 예시

[실습 5-1] NEXT_DAY, LAST_DAY 함수를 사용하여 출력하기
 SELECT SYSDATE, 
        NEXT_DAY(SYSDATE,'월요일'), // 22/01/10
        LAST_DAY(SYSDATE)  // 22/01/31
FROM DUAL;

 

 


ROUND, TRUNC 함수
        1) 숫자 데이터의 반올림, 버림 처리에 사용한 ROUND, TRUNC 함수를 날짜 데이터를 입력 데이터로 사용할 수 있다.
        2) ROUND([날짜데이터], [반올림 기준 포맷]), TRUNC([날짜데이터], [버림 기준 포맷])
        3) 포맷 값

추가 정리 필요

사용 예시

SELECT SYSDATE,
       ROUND(SYSDATE, 'CC') AS FORMAT_CC,
       ROUND(SYSDATE, 'YYYY') AS FORMAT_YYYY,
       ROUND(SYSDATE, 'Q') AS FORMAT_Q,
       ROUND(SYSDATE, 'DDD') AS FORMAT_DDD,
       ROUND(SYSDATE, 'HH') AS FORMAT_HH
    FROM DUAL;

 

 

[실습 6-2] TRUNC 함수 사용하여 날짜 데이터 출력하기
SELECT SYSDATE,
       TRUNC(SYSDATE, 'CC') AS FORMAT_CC,
       TRUNC(SYSDATE, 'YYYY') AS FORMAT_YYYY,
       TRUNC(SYSDATE, 'Q') AS FORMAT_Q,
       TRUNC(SYSDATE, 'DDD') AS FORMAT_DDD,
       TRUNC(SYSDATE, 'HH') AS FORMAT_HH
    FROM DUAL;

 

 


TO_CHAR       
        1) 숫자 또는 날짜 데이터 → 문자 데이터
        2) TO_CHAR([날짜데이터], [출력되길 원하는 문자 형태])
        3) 형식문자의 종류 P.159
        4) 기본 형식
            TO_CHAR([날짜 데이터], [출력되길 원하는 문자 형태],
            'NLS_DATE_LANGUAGE = language(선택)')
        5) 숫자 데이터를 문자 데이터로 변환하는 형식의 종류 P.162

사용 예시

[실습 1-1] 숫자와 문자열(숫자)을 더하여 출력하기


SELECT EMPNO, ENAME, EMPNO + '500' // 숫자로 자동형변환 되어 덧셈 연산이 됨
    FROM EMP
WHERE ENAME = 'SCOTT';

 

 

[실습 1-2] SYSDATE 날짜 형식 지정하여 출력하기

 

SELECT 

TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') AS 현재날짜시간 // 2022/01/03 13:27:05
FROM DUAL;  

아래 실행결과

 

[실습 1-3] 월과 요일을 다양한 형식으로 출력하기

 

SELECT SYSDATE,
       TO_CHAR(SYSDATE, 'MM') AS MM,   // 01
       TO_CHAR(SYSDATE, 'MON') AS MM,   // 1월
       TO_CHAR(SYSDATE, 'MONTH') AS MM,   // 1월
       TO_CHAR(SYSDATE, 'DD') AS DD,  // 03
       TO_CHAR(SYSDATE, 'DY') AS DY,   // 월
       TO_CHAR(SYSDATE, 'DAY') AS DAY   // 월요일
FROM DUAL;

 

[실습 1-4] 여러 언어로 날짜(월) 출력하기

 

SELECT SYSDATE,
       TO_CHAR(SYSDATE, 'MM') AS MM,
       TO_CHAR(SYSDATE, 'MON',       'NLS_DATE_LANGUAGE = KOREAN'    ) AS MON_KOR,
       TO_CHAR(SYSDATE, 'MON',       'NLS_DATE_LANGUAGE = JAPANESE'  ) AS MON_KOR,
       TO_CHAR(SYSDATE, 'MON',       'NLS_DATE_LANGUAGE = ENGLISH'   ) AS MON_KOR,
       TO_CHAR(SYSDATE, 'MONTH',     'NLS_DATE_LANGUAGE = KOREAN'    ) AS MONTH_KOR,
       TO_CHAR(SYSDATE, 'MONTH',     'NLS_DATE_LANGUAGE = JAPANESE'  ) AS MONTH_KOR,
       TO_CHAR(SYSDATE, 'MONTH',     'NLS_DATE_LANGUAGE = ENGLISH'   ) AS MONTH_KOR
    FROM DUAL;

 

실행결과

[실습 1-5] SYSDATE 시간 형식 지정하여 출력하기

 

SELECT SYSDATE,
       TO_CHAR(SYSDATE, 'HH24:MI:SS') AS HH23MISS,
       TO_CHAR(SYSDATE, 'HH24:MI:SS AM') AS HH23MISS_AM,
       TO_CHAR(SYSDATE, 'HH24:MI:SS P.M.') AS HH23MISS_PW
    FROM DUAL;

 

 

[실습 1-6] 여러 가지 숫자 형식을 사용하여 급여 출력하기

 

SELECT SAL,
       TO_CHAR(SAL, '$999,999') AS SAL_$,
       TO_CHAR(SAL, 'L999,999') AS SAL_L,
       TO_CHAR(SAL, '999,999.00') AS SAL_L_1,
       TO_CHAR(SAL, '000,999,999.00') AS SAL_L_2,
       TO_CHAR(SAL, '000999999.99') AS SAL_L_3,
       TO_CHAR(SAL, '999,999,00') AS SAL_L_4
 FROM EMP;

 

 


TO_NUMBER    
        1)문자 데이터 → 숫자 데이터
        2) TO_NUMBER([문자 데이터], [인식될 숫자형태])

사용 예시

SELECT 

        1300 - '1500',
       '1300' + 1500
FROM DUAL;

 

// 이렇게 알아서 형변환이 되기도 하지만, TO_NUMBER 를 사용할 수도 있다. 

 

[실습 2-2] 문자 데이터를 숫자 형태로 강제로 인식시켜주는 TO_NUMBER


SELECT 

       TO_NUMBER('1,300', '999,999'),
       TO_NUMBER('1,500', '999,999'),
       TO_NUMBER('1,300', '999,999') - TO_NUMBER('1,500', '999,999')
FROM DUAL;

 

 


TO_DATE
        1) 문자 데이터 → 날짜 데이터
        2) TO_DATE([문자열 데이터], [인식될 날짜형태])

사용 예시

[실습 3-1] TO_DATE 함수로 문자 데이터를 날짜 데이터로 변환하기
SELECT 
       TO_DATE('2018-07-14', 'YYYY-MM-DD') AS TODATE1,
       TO_DATE('20180714', 'YYYY-MM-DD') AS TODATE2
FROM DUAL;

 

[실습 3-2] 1981년 6월 1일 이후에 입사한 사원 정보 출력하기
SELECT * FROM EMP WHERE HIREDATE > TO_DATE('1981/06/01', 'YYYY-MM-DD');

 

 


NVL 함수
    . NULL 처리 함수
    . 기본 형식
        NVL([NULL인지 여부를 검사할 데이터 또는 열], [앞의 데이터가 NULL일 경우 반환할 데이터])
    . 열 또는 데이터를 입력하여 해당 데이터가 NULL이 아닐 경우 데이터를 그대로 반환하고,
      NULL인 경우 지정한 데이터를 반환한다.

사용 예시

[실습 1-1] NVL 함수를 사용하여 출력하기
SELECT EMPNO, ENAME, SAL, COMM, SAL+COMM,
       NVL(COMM, 0),   //  COMM 이 NULL 이면 0 을 반환합니다.
       SAL+NVL(COMM, 0)  // SAL 과 합산하여 출력합니다.
FROM EMP;

 

 


NVL2 함수
    . NVL 함수와 비슷하지만 데이터가 NULL이 아닐 때 반환할 데이터를 추가로 지정해 줄 수 있다.
    . 기본 형식
        NVL2([NULL인지 여부를 검사할 데이터 또는 열], [앞 데이터가 NULL이 아닐 경우 반환할 데이터 또는 계산식], [앞 데이터가 NULL일 경우 반환할 데이터 또는 계산식])

사용 예시

[실습 2-1] NVL2 함수를 사용하여 출력하기
SELECT EMPNO, ENAME, COMM,
       NVL2(COMM, '0', 'X'),
       NVL2(COMM, SAL*12+COMM, SAL*12) AS ANNSAL  // COMM 이  NULL 이 아니면  SAL*12_COMM 을, NULL이면 SAL*12를 반환합니다. 
FROM EMP;

 

 


DECODE 함수
    . 기준이 되는 데이터를 먼저 지정한 후 해당 데이터 값에 따라 다른 결과 값을 내보내는 함수
    . 자바의 if 조건문 또는 switch-case 조건문과 비슷한다.
    . 기본 형식
        DECODE(
            [검사 대상이 될 열 또는 데이터, 연산이나 함수의 결과],
            [조건1], [데이터가 조건1과 일치할 때 반환할 결과],
            [조건2], [데이터가 조건2와 일치할 때 반환할 결과],
            ...
            [조건N], [데이터가 조건n과 일치할 때 반환할 결과],
            [위 조건1~조건n과 일치할 경우가 없을 때 반환할 결과]
        )

사용 예시

SELECT EMPNO, ENAME, JOB, SAL,
        DECODE(JOB, 
              'MANAGER', SAL*1.1,    // 첫 번째 조건, JOB == MANAGER 이면, SAL * 1.1 
              'SALESMAN', SAL*1.05,   // 두 번째 조건, JOB == SALESMAN 이면, SAL * 1.05
              'ANALYST', SAL,  // 세 번째 조건, JOB == ANALYST 이면, SAL 
              SAL*1.03) AS UPSAL // 그 외, SAL * 1.03  

FROM EMP;

 

 


CASE문
    . CASE문은 각 조건에 사용하는 데이터가 서로 상관없어도 된다.
(=기준값이 없어도 된다)

    . 기본 형식
        CASE []
            WHEN [조건1] THEN [조건1의 결과 값이 true일 때, 반환할 결과]
            WHEN [조건2] THEN [조건1의 결과 값이 true일 때, 반환할 결과]
            ...
            WHEN [조건n] THEN [조건n의 결과 값이 true일 때, 반환할 결과]
            ELSE [위 조건1~조건n과 일치하는 경우가 없을 때 반환할 결과]
        END

사용 예시

SELECT EMPNO, ENAME, JOB, SAL,
    CASE JOB
        WHEN 'MANAGER' THEN SAL*1.1
        WHEN 'SALESMAN' THEN SAL*1.05
        WHEN 'ANALYST' THEN SAL
        ELSE SAL*1.03
    END AS UPSAL
FROM EMP;

 

[실습 2-2] 열 값에 따라서 출력 값이 달라지는 CASE문
SELECT EMPNO, ENAME, COMM,
    CASE
        WHEN COMM IS NULL THEN '해당사항 없음'
        WHEN COMM = 0 THEN '수당없음'
        WHEN COMM > 0 THEN '수당 : ' || COMM
    END AS COMM_TEXT
FROM EMP;

'SQL' 카테고리의 다른 글

[ORACLE] 기본 문법 4 _데이터 조작어  (0) 2022.01.03
[ORACLE] 기본 문법 3  (0) 2022.01.03
[ORACLE] 기본 문법 1  (0) 2022.01.03
[Oracle] 오라클 사용법_기초  (0) 2022.01.03
[SQL] JAVA 와 연동하는 방법  (0) 2021.11.30

댓글