- 주어진 날짜자료 d에 정수 n개월 만큼을 더한 월을 더한 날짜 반환
사용예) 사원테이블에서 입사일자가(HIRE_DATE) 수습시작일이라 가정하고
정식 발령일자(3개월 후)를 조회하여 이번달에 입사한 사원을 조회하시오.
Alias는 사원번호, 사원명, 수습일자, 발령일
SELECT EMPLOYEE_ID AS 사원번호,
EMP_NAME AS 사원명,
HIRE_DATE AS 수습일자,
ADD_MONTHS(HIRE_DATE,3) AS 발령일
FROM EMP
WHERE EXTRACT (MONTH FROM ADD_MONTHS(HIRE_DATE,3)) =
EXTRACT (MONTH FROM SYSDATE);
--발령일이 이번달에 속한 사람
3) NEXT_DAY(d, c), LAST_DAY(d)
- NEXT_DAY : 주어진 날짜 d이후의 날짜 중 가장 빠른 c요일('월', '월요일', '화', '화요일',...)의 날짜를 반환
--d날짜 바로 다음 날이 아님/ 요일 값을 알려주는 것
- LAST_DAY : 주어진 날짜 d에 포함된 월의 마지막일자를 나타내는 날짜 반환
--보통 2월달것을 씀
사용예) 2005년 2월 제품별 매입합계를 조회하시오
상품코드, 상품명, 매입수량합계, 매입금액합계 -- 매입금액은 수량*단가이다.
SELECT A.BUY_PROD AS 상품코드,
B.PROD_NAME AS 상품명,
SUM(A.BUY_QTY) AS 매입수량합계,
SUM(A.BUY_QTY * B.PROD_COST) AS 매입금액합계
-- 아무 상품이 아니라 매입된 상품의 상품명
FROM BUYPROD A, PROD B
WHERE B.PROD_ID = A.BUY_PROD
--(조인 조건)매입 테이블의 상품번호와 상품테이블에 상품번호를 가져와서 상품명을 찾을 수 있음
AND A.BUY_DATE BETWEEN TO_DATE('20050201') AND LAST_DAY(TO_DATE('20050201'))
-- TO_DATE('20050201')를 날짜로 바꿔서 2월 마지막 일자로 바꿔라(LAST_DAY)
-- 날짜 타입은 BETWEEN연산자를 사용하고 문자 타입은 LIKE연산자를 사용한다.
GROUP BY A.BUY_PROD, B.PROD_NAME -- 상품 이름이 같은 것 끼리 구별
ORDER BY 1;
- 두 날짜자료 사이의 달수를 반환
-- 정수값이 아닐수 있고 소수점 으로 나올수 있음
-- 절삭과 반올림이 사용될 수 있음
사용예) 회원테이블에서 회원들의 생년월일을 이용하여 경과된 개월 수를 조회하시오
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_BIR AS 생년월일,
ROUND(MONTHS_BETWEEN(SYSDATE,MEM_BIR)/12) AS 월수 -- ROUND는 반올림
//12을 나누면 나이가 나옴
FROM MEMBER;
- 주어진 날짜 d에서 'fmt'로 정의된 요소 값을 반환
- fmt는 'YEAR', 'MONTH', 'DAY', 'HOUR', 'MINUTE', 'SECOND'
- 반환 값의 타입은 숫자형임
**MEMBER 테이블에서 다음 자료를 수정하시오.
회원번호 : 'i001'
이름 : '최지현'
MEM_REGNO1: '741220' => '011220'
MEM_REGNO2: '2384719' => '4384719'
MEM_BIR: '1974/12/20' => '2001/12/20'
UPDATE MEMBER
SET MEM_REGNO1 = '011220',
MEM_REGNO2 = '4384719',
MEM_BIR = TO_DATE('2001/12/20')
WHERE MEM_ID = 'i001';
SELECT MEM_ID, MEM_NAME, MEM_REGNO1, MEM_REGNO2, MEM_BIR
FROM MEMBER
WHERE MEM_ID = 'i001';
회원번호 : 't001'
이름 : '성원태'
MEM_REGNO1: '760506' => '000506'
MEM_REGNO2: '1454731' => '3554731'
MEM_BIR: '1976/05/06' => '2000/05/06'
UPDATE MEMBER
SET MEM_REGNO1 = '000506',
MEM_REGNO2 = '3554731',
MEM_BIR = TO_DATE('2000/05/06')
WHERE MEM_ID = 't001';
SELECT MEM_ID, MEM_NAME, MEM_REGNO1, MEM_REGNO2, MEM_BIR
FROM MEMBER
WHERE MEM_ID = 't001';
회원번호 : 'e001'
이름 : '이혜나'
MEM_REGNO1: '750501' => '020501'
MEM_REGNO2: '2406017' => '4406017'
MEM_BIR: '1975/05/01' => '2000/05/06'
UPDATE MEMBER
SET MEM_REGNO1 = '020501',
MEM_REGNO2 = '4406017',
MEM_BIR = TO_DATE('2000/05/06')
WHERE MEM_ID = 'e001';
SELECT MEM_ID, MEM_NAME, MEM_REGNO1, MEM_REGNO2, MEM_BIR
FROM MEMBER
WHERE MEM_ID = 'e001';
COMMIT;
사용예) 회원테이블에서 이번달 생일인 회원을 추출하시오
Alias는 회원번호, 회원명, 생년월일, 마일리지
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_BIR AS 생년월일,
MEM_MILEAGE AS 마일리지
FROM MEMBER
WHERE EXTRACT(MONTH FROM MEM_BIR)=EXTRACT(MONTH FROM SYSDATE)
--다음달이 생일인 사람: WHERE EXTRACT(MONTH FROM MEM_BIR)
= EXTRACT(MONTH FROM SYSDATE)+1
사용예) 사원테이블에서 근속년수를 계산하여 근속년수가 20년 이상인 사원을 조회하시오
Alias는 사원번호, 사원명, 입사일, 근속년수이다.
SELECT EMPLOYEE_ID AS 사원번호,
EMP_NAME AS 사원명,
HIRE_DATE AS 입사일,
EXTRACT(YEAR FROM SYSDATE)-EXTRACT(YEAR FROM HIRE_DATE) AS 근속년수
--오늘 날짜에서 연도를 뽑은것
FROM EMP
WHERE EXTRACT(YEAR FROM SYSDATE)-EXTRACT(YEAR FROM HIRE_DATE)>=20;