오라클 데이터 검색 – Scalar Function(3) 변환형 함수 외

스칼라 함수 마지막 시간입니다. 날짜형, 변환형 그리고 기타 몇 가지 함수에 대해 살펴보겠습니다.

  1. 날짜형 함수의 종류

  2. SYSDATE
    시스템의 현재 날짜를 구해 돌려주는데, 우리가 지금 실습하고 있는 Personal Oracle의 의 기본 유형은 YY/MM/DD입니다. 즉 01/03/27과 같은 식으로 구합니다.
    아래와 같이 직접 입력해 보세요.

    SELECT SYSDATE
    FROM DUAL;

  3. LAST_DAY(날짜)
    주어진 날짜에 해당하는 월의 마지막 날짜를 구합니다.

    SELECT LAST_DAY(SYSDATE)
    FROM DUAL;

  4. MONTHS_BETWEEN(날짜1, 날짜2)
    날짜1과 날짜2의 달의 차이를 나타냅니다.
    만약 날짜를 직접 입력할 때는 문자처럼 좌우를 작은 따옴표(‘ ‘)로 둘러싸야 합니다.

    SELECT MONTHS_BETWEEN(’02/03/27′, ’02/03/01′)
    FROM DUAL;

    위와 같이 하면 결과가  .838709677이 됩니다.
    이것은 3월 27일과 3월 1일의 차이는 약 0.838709677개월이라는 뜻입니다.

    ADD_MONTHS(날짜, 숫자값)
    주어진 날짜에 숫자만큼의 개월 수를 더한 결과를 구합니다.
    예를 들어

    SELECT ADD_MONTHS(SYSDATE, 12)
    FROM DUAL;
    라고 했을 때,
    만약 오늘이 2002년 3월 27일이라면 12개월 후인 2003년 3월 27일이 표시되겠죠. 기본 포맷이 YY/MM/DD이니까 03/03/27이라고 표시되겠죠.

  5. 변환형 함수의 종류
    변환형 함수는 숫자형, 문자형, 날짜형 데이터를 서로 다른 형식으로 바꾸기 위해 사용합니다.

  6. TO_CHAR(문자값,  형식)
    숫자를 문자로 변환하거나 날짜를 문자로 변환할 때 사용하는 함수입니다.
    문자값에는 숫자나 날짜 또는 컬럼 이름 등이 올 수 있습니다.

    숫자를 정해진 형식의 문자로 바꿀 때 사용하는 기호들입니다.

    무슨 말인지 잘 모르시겠죠? 다음과 같이 직접 입력해 보세요.

    SELECT  TO_CHAR(123456.789, ‘L999,999.9’)
    FROM DUAL;

    ₩123,456.8와 같이 표시되면 정상입니다.

    날짜를 정해진 형식의 문자로 바꿀 때 사용하는 기호들입니다.

    • 날짜를 문자로 변환할 때는 대소문자를 구별해야 하니까 이 점 주의하시고,
    • 만약 앞에 0이나 공백을 없애려면 ‘fm’을 사용합니다.
    • 형식 내의 또 다른 문자를 포함하는 경우 (/ . , : 제외) 큰 따옴표(” “)를 사용해야 합니다.

    다음과 같이 실행하면 어떻게 될까요?

    SELECT TO_CHAR(SYSDATE, ‘fmDD “of” Month YYYY HH24:MI’)
    FROM DUAL;

    지금 실행하니까 이렇게 나오네요.
    27 of March 2002 23:41

  7. TO_DATE(문자값,  형식 )
    기본 날짜 형식(YY/MM/DD)이 아닌 다른 형식의 날짜를 날짜형으로 변환할 때 사용한다.
    주로 DATE Type의 Column에 값을 입력할 때 많이 사용합니다. (Default Format이 아닐 경우에 사용)
    다음을 보세요.

    SELECT MONTHS_BETWEEN(’02/03/01′,
    TO_DATE(‘JAN-01-02’, ‘MON-DD-YY’))
    FROM DUAL;

    2002년 3월 1일과 2002년 1월 1일의 차이를 구하는 것입니다. 결과는 2가 나올 것입니다. (두 달 차이가 나니까요.)

  8. TO_NUMBER(문자값)
    문자값을 숫자로 바꾸는 것입니다.

    SELECT TO_NUMBER(‘1234’)
    FROM DUAL;

    문자 1234가 아닌 숫자 1234로 바뀌겠죠.

    그 외에 다음과 같은 함수들이 있습니다.

  9. NVL(Column Name, ‘대체문자열’)
    Null을 허용하는 컬럼을 표시할 때 Null인 경우에는 원하는 값으로 바꾸어 표시합니다.
    Null값을 대신할 대체 문자열이 반드시 있어야 합니다.

    SELECT EMP_NUM,
    NVL(AVAILABLE, ‘NO’)
    FROM EMP_SKILL;

    AVAILABLE 컬럼의 값이 Null 값일 경우 ‘NO’로 대체하여 표시합니다.

  10. DECODE(컬럼이름, 원래값1, 대체값1, 원래값2, 대체값2, … 기본대체값)
    C 언어나 지금 한창 강좌 진행중인 PHP와 같은 언어에서 다음과 같은 역할을 합니다.
    switch (컬럼값 )
    {
    case 원래값1:  대체값1;
    case 원래값2:  대체값2;

    기본대체값
    }

    잘 이해가 안 되시는 분 계실테니 예를 들어 설명드리죠.

    SELECT EMP_NUM,
    DECODE(SKILL_NO, ‘S101’, ‘SCJP’, ‘S102’, ‘SCJD’, ‘OCP’)
    FROM EMP_SKILL;

    위와 같이 하면
    SKIL_NO 컬럼의 값이 ‘S101’이면 ‘SCJP’로 바꾸고, ‘S102’면 ‘SCJD’로 바꾸고, 그렇지 않으면 모두 ‘OCP’로 바꾸어 표시하라는 뜻입니다.

오늘은 양이 좀 많았네요.
피곤해서 졸린 눈을 부비면서, 이상 동주아빠 손병목이었습니다.

위로 스크롤