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

- 날짜형 함수의 종류
- SYSDATE
시스템의 현재 날짜를 구해 돌려주는데, 우리가 지금 실습하고 있는 Personal Oracle의 의 기본 유형은 YY/MM/DD입니다. 즉 01/03/27과 같은 식으로 구합니다.
아래와 같이 직접 입력해 보세요.
SELECT SYSDATE
FROM DUAL; - LAST_DAY(날짜)
주어진 날짜에 해당하는 월의 마지막 날짜를 구합니다.
SELECT LAST_DAY(SYSDATE)
FROM DUAL; - 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이라고 표시되겠죠. - 변환형 함수의 종류
변환형 함수는 숫자형, 문자형, 날짜형 데이터를 서로 다른 형식으로 바꾸기 위해 사용합니다.
- 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 - 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가 나올 것입니다. (두 달 차이가 나니까요.) - TO_NUMBER(문자값)
문자값을 숫자로 바꾸는 것입니다.
SELECT TO_NUMBER(‘1234’)
FROM DUAL;
문자 1234가 아닌 숫자 1234로 바뀌겠죠.그 외에 다음과 같은 함수들이 있습니다.
- NVL(Column Name, ‘대체문자열’)
Null을 허용하는 컬럼을 표시할 때 Null인 경우에는 원하는 값으로 바꾸어 표시합니다.
Null값을 대신할 대체 문자열이 반드시 있어야 합니다.
SELECT EMP_NUM,
NVL(AVAILABLE, ‘NO’)
FROM EMP_SKILL;
AVAILABLE 컬럼의 값이 Null 값일 경우 ‘NO’로 대체하여 표시합니다. - 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’로 바꾸어 표시하라는 뜻입니다.
오늘은 양이 좀 많았네요.
피곤해서 졸린 눈을 부비면서, 이상 동주아빠 손병목이었습니다.
