DB/MySql (MariaDB)
MySQL (MariaDB) 두 날짜 사이 일수, 주말(평일) 일수 구하기 - 삽질중인 개발자
개발 N년차
2020. 4. 12. 00:36
반응형
- 두 날짜 사이 차이, 주말, 평일 일 수 구하기 -
mariaDB에서 두 날짜 사이의 차이와 주말, 평일 일수를 구하는 방법입니다.
1. 두 날짜 사이 일수 구하기
SELECT ABS(DATEDIFF('2020-01-01','2020-02-01'))+1
2. 두 날짜 사이 주말 일수 구하는 함수
CREATE FUNCTION F_TOTAL_WEEKDAYS(date1 DATE, date2 DATE)
RETURNS INT
RETURN ABS(DATEDIFF(date2, date1)) + 1
- ABS(DATEDIFF(ADDDATE(date2, INTERVAL 1 - DAYOFWEEK(date2) DAY),
ADDDATE(date1, INTERVAL 1 - DAYOFWEEK(date1) DAY))) / 7 * 2
- (DAYOFWEEK(IF(date1 < date2, date1, date2)) = 1)
- (DAYOFWEEK(IF(date1 > date2, date1, date2)) = 7);
SELECT F_TOTAL_WEEKEND('2020-01-01','2020-02-01')
3. 두 날짜 사이 평일 일 수 구하기
SELECT ABS(DATEDIFF('2020-01-01','2020-02-01'))+1 - F_TOTAL_WEEKEND('2020-01-01','2020-02-01')
복붙해서 가져다가 쓰면 되지만 주말 일 수 구하는 원리를 설명하자면
date1 = 2020-01-01
date2 = 2020-02-01
ABS(DATEDIFF(date2, date1)) + 1
date2와 date1 사이의 일수를 구하고 +1 을 한다. (두 날짜의 시간이 00:00:00 이라고 치면 하루치가 손실이 되어서 +1 해준다. )
ABS(DATEDIFF(ADDDATE(date2, INTERVAL 1 - DAYOFWEEK(date2) DAY),
ADDDATE(date1, INTERVAL 1 - DAYOFWEEK(date1) DAY))) / 7 * 2
date1과 date2가 해당하는 주의 일요일을 가져온 후 두 일요일 사이의 날짜를 뺀다
빼서 나온 값에 7(일주일 일수) 을 나누고 2(주말 일수)를 곱하면 주말의 숫자가 나온다.
(DAYOFWEEK(IF(date1 < date2, date1, date2)) = 1)
(DAYOFWEEK(IF(date1 > date2, date1, date2)) = 7)
date1이나 date2가 일요일 혹은 토요일인 경우 하루치를 빼준다.
반응형