본문 바로가기

DB/MySql (MariaDB)

MySQL (MariaDB) 두 날짜 사이 일수, 주말(평일) 일수 구하기 - 삽질중인 개발자

반응형

- 두 날짜 사이 차이, 주말, 평일 일 수 구하기 -

 

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가 일요일 혹은 토요일인 경우 하루치를 빼준다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'DB > MySql (MariaDB)' 카테고리의 다른 글

MariaDB 모든 날짜 생성하기 - 삽질중인 개발자  (1) 2022.07.20