Oracle SQL 이번주, 지난주 / 주간 집계 / 요일함수
데이터베이스에서 집계, 통계를 조회할때 사용하는 요일/주간 함수 사용에 대한 포스팅입니다.
※ TRUNC 주(Week)에 대한 Format
'w' : 매월1일 요일을 기준한 주초일자.
'ww' : 매년 1월1일 요일을 기준한 주초일자.
'iw' : 주초 월요일일자.
'd' / 'dy' / 'day' : 주초 일요일 일자.
- 출처 : https://blog.naver.com/down83/50089087763
1. 월요일 기준
- SYSDATE : 2021/02/21 기준
- 이번주
-- 이번주 월요일
SELECT TRUNC(sysdate, 'iw') 이번주월요일 FROM DUAL;
-- 이번주 주간날짜
SELECT SYSDATE 오늘
,TRUNC(sysdate,'iw') 월
,TRUNC(sysdate,'iw')+1 화
,TRUNC(sysdate,'iw')+2 수
,TRUNC(sysdate,'iw')+3 목
,TRUNC(sysdate,'iw')+4 금
,TRUNC(sysdate,'iw')+5 토
,TRUNC(sysdate,'iw')+6 일
FROM DUAL;
> RESULT
- 지난주
-- 지난주 월요일
SELECT TRUNC(sysdate, 'iw')-7 지난주월요일 FROM DUAL;
-- 지난주 주간날짜
SELECT SYSDATE 오늘 ,
TRUNC(sysdate,'iw')-7 월
,TRUNC(sysdate,'iw')-6 화
,TRUNC(sysdate,'iw')-5 수
,TRUNC(sysdate,'iw')-4 목
,TRUNC(sysdate,'iw')-3 금
,TRUNC(sysdate,'iw')-2 토
,TRUNC(sysdate,'iw')-1 일
FROM DUAL;
> RESULT
2. 일요일 기준
- SYSDATE : 2021/02/21 기준
- 이번주
-- 이번주 일요일
SELECT TRUNC(sysdate, 'd') 이번주일요일 FROM DUAL;
-- 이번주 주간 날짜
SELECT SYSDATE 오늘
,TRUNC(sysdate,'d') 일
,TRUNC(sysdate,'d')+1 월
,TRUNC(sysdate,'d')+2 화
,TRUNC(sysdate,'d')+3 수
,TRUNC(sysdate,'d')+4 목
,TRUNC(sysdate,'d')+5 금
,TRUNC(sysdate,'d')+6 토
FROM DUAL;
> RESULT
- 지난주
-- 지난주 일요일
SELECT TRUNC(sysdate, 'd')-7 지난주일요일 FROM DUAL;
-- 지난주 주간날짜
SELECT SYSDATE 오늘
,TRUNC(sysdate,'d')-7 일
,TRUNC(sysdate,'d')-6 월
,TRUNC(sysdate,'d')-5 화
,TRUNC(sysdate,'d')-4 수
,TRUNC(sysdate,'d')-3 목
,TRUNC(sysdate,'d')-2 금
,TRUNC(sysdate,'d')-1 토
FROM DUAL;
> RESULT
3. 사용 예, 지난주 요일별 가입자수 집계
- 다음과 같은 회원테이블이 있을 때, 가입일(JOINDATE) 컬럼으로 지난주의 요일별 가입자 수 집계
-- 지난주(월요일 기준) 요일별 가입자수 집계
SELECT
(SELECT COUNT(*)
FROM T_MEMBER
WHERE TO_CHAR(JOINDATE, 'yyyymmdd') =
TO_CHAR(TRUNC(sysdate,'iw')-7, 'yyyymmdd'))
AS "월요일"
,(SELECT COUNT(*)
FROM T_MEMBER
WHERE TO_CHAR(JOINDATE, 'yyyymmdd') =
TO_CHAR(TRUNC(sysdate,'iw')-6, 'yyyymmdd'))
AS "화요일"
,(SELECT COUNT(*)
FROM T_MEMBER
WHERE TO_CHAR(JOINDATE, 'yyyymmdd') =
TO_CHAR(TRUNC(sysdate,'iw')-5, 'yyyymmdd'))
AS "수요일"
,(SELECT COUNT(*)
FROM T_MEMBER
WHERE TO_CHAR(JOINDATE, 'yyyymmdd') =
TO_CHAR(TRUNC(sysdate,'iw')-4, 'yyyymmdd'))
AS "목요일"
,(SELECT COUNT(*)
FROM T_MEMBER
WHERE TO_CHAR(JOINDATE, 'yyyymmdd') =
TO_CHAR(TRUNC(sysdate,'iw')-3, 'yyyymmdd'))
AS "금요일"
,(SELECT COUNT(*)
FROM T_MEMBER
WHERE TO_CHAR(JOINDATE, 'yyyymmdd') =
TO_CHAR(TRUNC(sysdate,'iw')-2, 'yyyymmdd'))
AS "토요일"
,(SELECT COUNT(*)
FROM T_MEMBER
WHERE TO_CHAR(JOINDATE, 'yyyymmdd') =
TO_CHAR(TRUNC(sysdate,'iw')-1, 'yyyymmdd'))
AS "일요일"
FROM DUAL;
> RESULT
'IT > Database' 카테고리의 다른 글
MySQL 다운로드 및 설치 가이드(3) / MySQL.8.x버전 / Window10 (0) | 2021.01.24 |
---|---|
MySQL 다운로드 및 설치 가이드(2) / MySQL.8.x버전 / Window10 (0) | 2021.01.24 |
MySQL 다운로드 및 설치 가이드(1) / MySQL.8.x버전 / Window10 (0) | 2021.01.24 |