[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 옵션으로 날짜의 차이를 구한 것은 모두 일자를 기준으로 차이 값을 구한다.
그렇다면, 일자의 차이와 상관없이 우리가 흔히 알고있는 이번 주, 저번 주, 다음 주 혹은 이번 달, 저번 달
즉, 월요일 기준의 주 차와 월 기준의 월 차를 알고 싶다면 어떻게 해야할까?
위 쿼리를 응용해보자
2. 응용하여 주 차, 월 차 구하기
먼저 특정 날짜값의 주 차를 계산하기 위한 기준 날짜, 월 차를 계산하기 위한 기준 날짜를 구해보자.
기준 날짜가 의미하는 것이 뭔 지 간단히 설명하자면,
특정 날짜가 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
이 데이터를 활용해서 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
원하는 결과를 얻을 수 있다.
응용한 결과 한 눈에 살펴보기
'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 |
댓글