날짜 함수

서현서현·2022년 2월 15일
0

DB, SQL

목록 보기
11/27
post-thumbnail

🧡 함수

🧡 날짜함수

🧡 1) SYSDATE

  • 시스템이 제공하는 날짜자료를 반환
(사용형식)
SYSDATE ***
-,,,,,초 자료 변환
- 덧셈과 뺄셈의 대상

🧡 2) ADD_MONTHS

  • 주어진 날짜자료에서 월을 더한 날짜자료 반환
(사용형식)
ADD_MONTHS(d,n)
- 날짜자료 d에 포함된 월에 n을 더한 날짜 반환

(EX1)

SELECT ADD_MONTHS(SYSDATE,5),
ADD_MONTHS(SYSDATE,-2)
FROM DUAL;

🧡 3) NEXT_DAY

  • 특정 요일에 해당하는 날짜반환
(사용형식)
NEXT_DAY(d, str)
- 날짜 d 이후 맨 처음 만나는 'str'(요일)에 해당하는 날짜를 반환
- STR은 요일을 나타내는 문자열로 '월', '월요일', '화', '화요일,...을 사용

(EX1)

SELECT NEXT_DAY(SYSDATE,'화'),
       NEXT_DAY(SYSDATE,'수'),
       NEXT_DAY(SYSDATE,'금')
FROM DUAL;

환경설정에서 날짜를 한글로 설정했으므로 월 화 수,...

🧡 4) LAST_DAY

  • 특정월의 마지막일이 표시된 날짜를 반환
(사용형식)
LAST_DAY(d)
- 날짜 d에 포함된 월의 마지막일에 해당하는 날짜를 반환
- 주로 2월의 마지막일이 28일인지 29일인지 불명확할때 사용

(EX1) 매입자료중 2005년 2월에 매입된 상품별 매입수량을 조회하시오

Alias는 상품코드, 상품명, 상품수량

B.PROD_NAME AS 상품명,
SUM(A.BUY_QTY) AS 매입수량
FROM BUYPROD A, PROD B
WHERE A.BUY_PROD=B.PROD_ID
AND A.BUY_DATE BETWEEN TO_DATE('20050201') AND LAST_DATE('20050201)
GROUP BY A.BUY_PROD,B.PROD_NAME
ORDER BY 1;

(EX3) MONTHS+BETWEEN

  • 두 날짜자료 사이에 존재하는 개월수 반환
(사용형식)
MONTHS_SETWEEN(d1,d2)
d1과 날짜 d2사이의 개월수 반환

(EX4) 회원테이블에서 회원들의 나이를 XX년 XX월 형식으로 구하여 출력하시오.

SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_BIR AS 출생년월일,
TRUNC(MONTHS_BETWEEN (SYSDATE,MEM_BIR)/12)||'년'||
MOD(TRUNC(MONTHS_BETWEEN(SYSDATE,MEM_BIR)),12) ||'월' AS 나이
FROM MEMBER;

🧡 5) ROUND, TRUNC

  • 날짜자료의 각 요소 (년,월,일,시,분,초)에 대한 반올림과 자리버림 수행
(사용형식)
ROUND(d[,fmt])
- 날짜자료 d를 ‘fmt’를 기준으로 반올림 하거나 자리버림한 결과를 반환
- ‘fmt’가 생략 되면 ‘년월일’까지를 기준으로 반올림과 자리버림 수행
- 'fmt'YEAR|YY|YYY|YYYY, MONTH|MM, DAY|DD, '월요일',...

(EX1)

SELECT ROUND(SYSDATE,'MM'),ROUND(SYSDATE,'YEAR'),
				TRUNC(SYSDATE,'MM'),TRUNC(SYSDATE,'YEAR'),
				ROUND(SYSDATE,'DD'),
				TRUNC(SYSDATE,'DD'),
				TO_CHAR(ROUND(SYSDATE),'YYYY-MM-DD HH24:MI:SS'),
				TO_CHAR(TRUNC(SYSDATE),'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;

🧡 6) EXTRACT

  • 날짜표현 요소 중 특정요소를 추출하여 반환
  • 반환되는 데이터타입은 숫자
(사용형식)
EXTRACT (fmt FROM d)
- 주어진 날짜자료 d에서 fmt로 표현된 요소값 반환
- fmt는 YEAR, MONTH, DAY, HOUR, MINUTE, SECOND

(EX1) 매입테이블에서 2005년 3월 일자별 매입집계를 조회하시오

Alias는 일자, 매입수량, 매입금액

SELECT BUY_DATE AS 일자, 
        SUM(BUY_QTY) AS 매입수량, 
        SUM(BUY_QTY*BUY_COST) AS 매입금액
FROM BUYPROD
WHERE EXTRACT(YEAR FROM BUY_DATE)= 2005
AND EXTRACT (MONTH FROM BUY_DATE) = 3
GROUP BY BUY_DATE
ORDER BY 1;

(EX2) 회원테이블에서 연령대별 마일리지 합계를 구하시오

Alias는 연령대, 마일리지합계

SELECT TRUNC(EXTRACT(YEAR FROM SYSDATE)-EXTRACT(YEAR FROM MEM_BIR),-1)||'대' AS 연령대, 
SUM(MEM_MILEAGE) AS 마일리지합계
FROM MEMBER
GROUP BY TRUNC(EXTRACT(YEAR FROM SYSDATE)-EXTRACT(YEAR FROM MEM_BIR),-1)
ORDER BY 1;

만약 인원수도 나타내고 싶다면

SELECT TRUNC(EXTRACT(YEAR FROM SYSDATE)-EXTRACT(YEAR FROM MEM_BIR),-1)||'대' AS 연령대, 
COUNT(*) AS 회원수,
SUM(MEM_MILEAGE) AS 마일리지합계
FROM MEMBER
GROUP BY TRUNC(EXTRACT(YEAR FROM SYSDATE)-EXTRACT(YEAR FROM MEM_BIR),-1)
ORDER BY 1;

0개의 댓글