WITH t AS ( SELECT DATE '2020-12-29' sdt, DATE '2021-01-05' edt UNION ALL SELECT DATE '2021-01-01', DATE '2021-01-17' UNION ALL SELECT DATE '2021-01-03', DATE '2021-01-07' ) SELECT sdt, edt , LENGTH(REPLACE( RPAD( SUBSTR('0123450', DATE_FORMAT(sdt, '%w') + 1, 7) , DATEDIFF(edt, sdt) + 1, '0123450') , '0', '')) x FROM t ; -- http://gurubee.net/article/51663
제가 직접 여러번 세어봤는데, 아무래도 마농님 결과에 오차가 있는거 같아서 추가 댓글 작성해 봅니다.
그리고 레코드 위치에 따라 RPAD() 가 달라져서 다른 결과가 나오기도 하구요. (비고 및 하단 표 참고)
테스트 했던 DB는 MariaDB 10.3.x 입니다.
WITH t AS ( SELECT DATE '2020-12-29' sdt, DATE '2021-01-05' edt UNION ALL SELECT DATE '2021-01-01', DATE '2021-01-17' UNION ALL SELECT DATE '2021-01-03', DATE '2021-01-07' UNION ALL SELECT DATE '2021-06-03', DATE '2021-07-07' -- 주말제외 25일 : 같은일자 다른결과 1 UNION ALL SELECT DATE '2021-06-13', DATE '2021-06-30' -- 주말제외 13일 : 같은일자 다른결과 2 -- 마농님 퀴즈 날짜 예시들 포함 UNION ALL SELECT DATE '2011-01-01', DATE '2011-01-01' UNION ALL SELECT DATE '2011-01-02', DATE '2011-01-02' UNION ALL SELECT DATE '2011-01-09', DATE '2011-01-15' UNION ALL SELECT DATE '2011-01-09', DATE '2011-01-16' UNION ALL SELECT DATE '2011-01-07', DATE '2011-01-08' UNION ALL SELECT DATE '2011-01-07', DATE '2011-01-09' -- 주말제외 1일 -- 같은 일자 다른 결과 확인 UNION ALL SELECT DATE '2021-06-03', DATE '2021-07-07' -- 주말제외 25일 : 같은일자 다른결과 1 UNION ALL SELECT DATE '2021-06-13', DATE '2021-06-30' -- 주말제외 13일 : 같은일자 다른결과 2 ) SELECT sdt, edt , ( (DATEDIFF(edt, sdt) + 1) - (scnt + ecnt) ) DIV 7 * 5 + (scnt + ecnt) working_days , X "마농님결과" , CASE WHEN sdt = '2011-01-07' THEN '주말제외 1일' WHEN sdt = '2021-06-03' THEN '주말제외 25일 : 같은일자 다른결과 1 ' WHEN sdt = '2021-06-13' THEN '주말제외 13일 : 같은일자 다른결과 2 ' ELSE '' END "비고" FROM ( SELECT sdt, edt , CASE WHEN DATE_FORMAT(sdt, '%w') BETWEEN 1 AND 5 THEN 6 - DATE_FORMAT(sdt, '%w') ELSE 0 END scnt , CASE WHEN DATE_FORMAT(edt, '%w') BETWEEN 1 AND 5 THEN DATE_FORMAT(edt, '%w') ELSE 0 END ecnt , LENGTH(REPLACE( RPAD( SUBSTR('0123450', DATE_FORMAT(sdt, '%w') + 1, 7) , DATEDIFF(edt, sdt) + 1, '0123450' ) , '0', '') ) X FROM t ) TTT
sdt | edt | working_days | 마농님결과 | 비고 |
2020-12-29 | 2021-01-05 | 6 | 6 | |
2021-01-01 | 2021-01-17 | 11 | 11 | |
2021-01-03 | 2021-01-07 | 4 | 4 | |
2021-06-03 | 2021-07-07 | 25 | 26 | 주말제외 25일 : 같은일자 다른결과 1 |
2021-06-13 | 2021-06-30 | 13 | 14 | 주말제외 13일 : 같은일자 다른결과 2 |
2011-01-01 | 2011-01-01 | 0 | 0 | |
2011-01-02 | 2011-01-02 | 0 | 0 | |
2011-01-09 | 2011-01-15 | 5 | 5 | |
2011-01-09 | 2011-01-16 | 5 | 5 | |
2011-01-07 | 2011-01-08 | 1 | 1 | 주말제외 1일 |
2011-01-07 | 2011-01-09 | 1 | 2 | 주말제외 1일 |
2021-06-03 | 2021-07-07 | 25 | 25 | 주말제외 25일 : 같은일자 다른결과 1 |
2021-06-13 | 2021-06-30 | 13 | 12 | 주말제외 13일 : 같은일자 다른결과 2 |