1. SYSDATE
- 시스템이 제공하는 날짜 및 시각정보(년,월,일,시,분,초) 반환
- '+', '-' 연산이 가능하며, 날짜자료 사이의 뺄셈의 결과는 두 날짜사이의 날수(Days)를 반환
--정오를 기준으로 반올림될수도 있음
2. ADD_MONTHS(d, n)
- 날짜자료 d에 포함된 월에 n을 더한 날짜 반환
사용예)-- 더해줄 개월 수// 출력은 날짜정보
SELECT EMPLOYEE_ID,
EMP_NAME,
HIRE_DATE,
ADD_MONTHS(HIRE_DATE,3)
FROM HR.EMPLOYEES;
3. NEXT_DAY(d, c) -- 주어진 날짜의 다음 만나는 요일
- 날짜 자료 d 이후에 처음 만나는 c 요일의 날짜 반환
- c는 '월요일', '월',....'일요일','일' 중 하나 기술
사용예)
SELECT NEXT_DAY(SYSDATE, '금') FROM DUAL;
SELECT NEXT_DAY(SYSDATE, '토요일') FROM DUAL;
4. LAST_DAY(d) - *** --년월일 있어야 함
- 날짜자료 d 에 포함된 월의 마지막 일자를 반환
- 주로 2월의 마지막 일자나 확정되니 않은 월의 마지막일자가 필요한 경우 사용
사용예) 회원테이블에서 각 회원의 생년월일에 포함된
월의 마지막 일을 조회하시오
SELECT MEM_ID,
MEM_NAME,
MEM_BIR,
LAST_DAY(MEM_BIR)
FROM MEMBER;
4. LAST_DAY(d) - *** --년월일 있어야 함
- 날짜자료 d 에 포함된 월의 마지막 일자를 반환
- 주로 2월의 마지막 일자나 확정되니 않은 월의 마지막일자가 필요한 경우 사용
사용예) 키보드로 년도와 월을 입력받아 해당 월에 발생된 매입수량과 매입금액합게를 출력하시오
ACCEPT P_PERIOD PROMPT '년도와 월(YYYYMM) 입력 ; ' -- ACCEPT 메세지 기술
DECLARE
L_SDATE DATE := TO_DATE('&P_PERIOD'||'01'); -- 시작일자
L_EDATE DATE := LAST_DAY(L_SDATE); -- 월의 종료 일자
L_SQTY NUMBER:=0; --수량합계 // 숫자변수 초기화 시켜야함 // 안하면 무한루트
L_SUM NUMBER:=0; -- 매입금액합계
BEGIN
SELECT SUM(A.BUY_QTY), SUM(A.BUY_QTY*B.PROD_COST) INTO L_SQTY,L_SUM
--셀렉트 INTO절 변수에 하나씩 넣는다
FROM BUYPROD A, PROD B
WHERE A.BUY_PROD=B.PROD_ID
AND A.BUY_DATE BETWEEN L_SDATE AND L_EDATE;
DBMS_OUTPUT.PUT_LINE('기간 : '||L_SDATE||'~'||L_EDATE);
DBMS_OUTPUT.PUT_LINE('매입수량 합계 : '||TO_CHAR(L_SQTY,'9,999')||'개');
DBMS_OUTPUT.PUT_LINE('매입금액 합계 : '||TO_CHAR(L_SUM,'999,999,999')||'원');
DBMS_OUTPUT.PUT_LINE('----------------------------------');
END;
---------------------------------------
기간 : 2020/06/01~2020/06/30
매입수량 합계 : 206개
매입금액 합계 : 48,090,000원
5. EXTRACT(fmt FROM d) - ***** -- 추출하다
- 주어진 날짜 자료 d 에서 'fmt'로 정의된 값을 반환
- 'fmt'는 YEAR, MONTH, DAY, MINUTE, SECOND 중 하나
- 결과는 숫자형 자료임
사용예) 회원테이블에서 회원들의 생년월일(MEM_BIR) 컬럼의 값을 사용하여 나이를 계산하시오
Alias 회원번호,회원명,생년월일,나이
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_BIR AS 생년월일,
EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM MEM_BIR) AS 나이
-- 오늘날짜 정보에서 '년도'를 뽑음 - 맴버 생년월일의 년도를 뽑음
FROM MEMBER
사용예) 회원테이블에서 이번달 생일인 회원을 찾아 보너스 마일리지를 100포인트씩 지급하려 한다.
이번달 생일인 회원정보를 조회하시오
Alias 회원번호,회원명,생년월일,원마일리지,변경마일리지
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_BIR AS 생년월일,
MEM_MILEAGE AS 원마일리지,
MEM_MILEAGE + 100 AS 변경마일리지
FROM MEMBER
WHERE EXTRACT(MONTH FROM SYSDATE)=EXTRACT(MONTH FROM MEM_BIR)
6. MONTHS_BETWEEN(d1,d2) -**
- 두 날짜자료 d1과 d2 사이의 개월 수를 반환
- 경력계산 등 날짜 자료 중 개월 수가 필요한 경우 사용
사용예) 사원테이블에서 80번 부서의 직원들의 근속년수를 계산하시오.
근속년수는 월단위 까지 계산하시오(XXS년 XX월)
Alias는 사원번호,사원명,입사일,직무코드,근속년수
SELECT EMPLOYEE_ID AS 사원번호,
EMP_NAME AS 사원명,
HIRE_DATE AS 입사일,
JOB_ID AS 직무코드,
ROUND(MONTHS_BETWEEN(SYSDATE,HIRE_DATE)) AS 근속개월수,
TRUNC(MONTHS_BETWEEN(SYSDATE,HIRE_DATE)/12)||'년'||
-- XXX월을 12로 나누면 몫: 년수
LPAD(ROUND(MOD(MONTHS_BETWEEN(SYSDATE,HIRE_DATE),12)),3)||'개월'
AS 근속년수-- XXX월을 12로 나눈 나머지 : 개월수
FROM HR.EMPLOYEES
WHERE DEPARTMENT_ID = 80;
'DataBase' 카테고리의 다른 글
2022-11-22 데이터 베이스 오라클 : ROLLUP 과 CUBE (0) | 2022.11.22 |
---|---|
2022-11-21 데이터 베이스 오라클 : 집계 함수 (0) | 2022.11.22 |
2022-11-17 데이터 베이스 오라클 : 숫자 함수 (0) | 2022.11.17 |
221116 데이터 베이스 오라클 : 오라클 함수 (0) | 2022.11.16 |
221108 데이터 베이스 오라클 : SQL (0) | 2022.11.16 |