[MySQL] 현재 날짜와의 차이 계산하기 : 일 차, 주 차, 월 차
1. 현재 날짜와 특정 날짜의 차이 값 계산하기
TIMESTAMPDIFF(옵션, 날짜1, 날짜2)
옵션 DAY, WEEK, MONTH 기준으로 일 차, 주 차, 월 차 값을 반환한다.
날짜1이 날짜2 보다 과거인 경우 양수 값으로 반환된다.
일 차이
TIMESTAMPDIFF(DAY, 특정날짜, CURDATE( ))
주 차이
TIMESTAMPDIFF(WEEK, 특정날짜, CURDATE( ))
월 차이
TIMESTAMPDIFF(MONTH, 특정날짜, CURDATE( ))
예시
TEST_TABLE에 STST_DATE 컬럼은 20년 10월부터 21년 1월까지 DATE 타입의 특정 날짜가 있다.
해당 특정 날짜와, 현재 날짜, 그리고 두 날짜의 일 차, 주 차, 월 차를 구해보자.
SELECT T1.STST_DATE // 특정 날짜
, CURDATE() // 현재 날짜 : 21년 1월 26일
, TIMESTAMPDIFF(DAY, T1.STST_DATE, CURDATE()) AS DIFF_DAY // 일 차이
, TIMESTAMPDIFF(WEEK, T1.STST_DATE, CURDATE()) AS DIFF_WEEK // 주 차이
, TIMESTAMPDIFF(MONTH, T1.STST_DATE, CURDATE()) AS DIFF_MONTH // 월 차이
FROM TEST_TABLE T1
결과
아래 화면과 같이 특정날짜가 같은 11월 이지만 월 차이가 2인 것이 있고, 1인 것이 있다.
즉, TIMESTAMPDIFF 옵션으로 날짜의 차이를 구한 것은 모두 일자를 기준으로 차이 값을 구한다.
![[MySQL] 현재 날짜와의 차이 계산하기 : 일 차, 주 차, 월 차 - 월 차이 - [MySQL] 현재 날짜와의 차이 계산하기 : 일 차, 주 차, 월 차 - 결과 [MySQL] 현재 날짜와의 차이 계산하기 : 일 차, 주 차, 월 차 - 월 차이 - [MySQL] 현재 날짜와의 차이 계산하기 : 일 차, 주 차, 월 차 - 결과](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
그렇다면, 일자의 차이와 상관없이 우리가 흔히 알고있는 이번 주, 저번 주, 다음 주 혹은 이번 달, 저번 달
즉, 월요일 기준의 주 차와 월 기준의 월 차를 알고 싶다면 어떻게 해야할까?
위 쿼리를 응용해보자
2. 응용하여 주 차, 월 차 구하기
먼저 특정 날짜값의 주 차를 계산하기 위한 기준 날짜, 월 차를 계산하기 위한 기준 날짜를 구해보자.
기준 날짜가 의미하는 것이 뭔 지 간단히 설명하자면,
![[MySQL] 현재 날짜와의 차이 계산하기 : 일 차, 주 차, 월 차 - 2. 응용하여 주 차, 월 차 구하기 [MySQL] 현재 날짜와의 차이 계산하기 : 일 차, 주 차, 월 차 - 2. 응용하여 주 차, 월 차 구하기](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
특정 날짜가 1월 26일인 경우,
주 차이를 계산하기 위해 그 주의 월요일인 날짜 1월 25일을 구해야하고,
월 차이를 계산하기 위해 그 월의 1일인 1월 1일을 구해야한다.
물론 한 주의 시작을 월요일로 할 지, 일요일로 할 지는 각자의 자유다.
먼저 TEST_TABLE의 STST_DATE 날짜의 각 주, 월 기준 날짜를 구해보자.
SELECT STST_DATE
, DATE_SUB(STST_DATE, INTERVAL WEEKDAY(STST_DATE) DAY) AS W_DATE
, DATE_SUB(STST_DATE, INTERVAL (DAY(STST_DATE)-1) DAY) AS M_DATE
FROM TEST_TABLE T
![[MySQL] 현재 날짜와의 차이 계산하기 : 일 차, 주 차, 월 차 - 2. 응용하여 주 차, 월 차 구하기 [MySQL] 현재 날짜와의 차이 계산하기 : 일 차, 주 차, 월 차 - 2. 응용하여 주 차, 월 차 구하기](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
이 데이터를 활용해서 TIMESTAMPDIFF 구문에 대입하면,
SELECT T1.STST_DATE, CURDATE()
, TIMESTAMPDIFF(DAY, T1.STST_DATE, CURDATE()) AS DIFF_DAY
, TIMESTAMPDIFF(WEEK, DATE_SUB(STST_DATE, INTERVAL WEEKDAY(STST_DATE) DAY), CURDATE()) AS DIFF_WEEK
, TIMESTAMPDIFF(MONTH, DATE_SUB(STST_DATE, INTERVAL (DAY(STST_DATE)-1) DAY), CURDATE()) AS DIFF_MONTH
FROM TEST_TABLE
원하는 결과를 얻을 수 있다.
![[MySQL] 현재 날짜와의 차이 계산하기 : 일 차, 주 차, 월 차 - 2. 응용하여 주 차, 월 차 구하기 [MySQL] 현재 날짜와의 차이 계산하기 : 일 차, 주 차, 월 차 - 2. 응용하여 주 차, 월 차 구하기](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
응용한 결과 한 눈에 살펴보기
![[MySQL] 현재 날짜와의 차이 계산하기 : 일 차, 주 차, 월 차 - 응용한 결과 한 눈에 살펴보기 [MySQL] 현재 날짜와의 차이 계산하기 : 일 차, 주 차, 월 차 - 응용한 결과 한 눈에 살펴보기](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
'Database > SQL' 카테고리의 다른 글
[ORACLE] 집계함수의 SUMMARY 구하기 - ROLLUP 함수 (0) | 2021.10.28 |
---|---|
[Oracle] "ORA-06502: PL/SQL: 수치 또는 값 오류: 문자열 버퍼가 너무 작습니다" 오류 해결 (0) | 2021.04.30 |
[Oracle] 행열 변환, 오라클 PIVOT 테이블 사용 방법 (0) | 2021.01.13 |
[MySQL] 원하는 구분자 기준으로 문자열 자르기 : SUBSTRING_INDEX (0) | 2020.11.06 |
[HeidiSQL] HeidisSQL 에서 조회한 데이터 엑셀 내보내기 (8) | 2020.07.23 |
댓글