> Programming > 특정 월의 특정 요일의 개수를 알고 싶을 때의 쿼리. (mysql)

특정 월의 특정 요일의 개수를 알고 싶을 때의 쿼리. (mysql)

특정 월(예를 들면 2014년 4월)에 특정 요일(예를 들면 화요일)이 몇번 있는지 알고 싶을 때 사용하는 쿼리를 작성해 보았다.

우선 결론부터 적으면 아래와 같이 사용하면 된다.

set @month = ‘2014-04-01’;
set @nweek = 4;

SELECT FLOOR((DATEDIFF(LAST_DAY(@month), @month) + 1) / 7) +
IF((IF(@nweek < DAYOFWEEK(@month), @nweek+7, @nweek) – DAYOFWEEK(@month)) < (DATEDIFF(LAST_DAY(@month), @month) + 1) % 7, 1, 0)

이상의 쿼리를 어떻게 만들었는지 좀 더 분해해 보면 아래와 같다.

1. 해당월의 숫자를 7로 나누어 기본 숫자를 만들었다. 대부분 4가 된다.

FLOOR((DATEDIFF(LAST_DAY(@month), @month) + 1) / 7)

2. 찾고자 하는 요일의 숫자(4=수요일)이 해당 월의 첫번째 요일의 숫자(3=화요일)보다 작으면 찾고자하는 요일의 숫자에 7을 더해준다. 그리고, 해당 월의 첫번째 요일 숫자와 찾고자하는 요일의 숫자를 빼준다.

IF((IF(@nweek < DAYOFWEEK(@month), @nweek+7, @nweek) – DAYOFWEEK(@month))

3. 2에서 나온 값이 해달월의 숫자를 7로 나눈 나머지 보다 작으면 1에서 나온 값에 1을 더해주고, 아니면 0을 더한다.

IF((IF(@nweek < DAYOFWEEK(@month), @nweek+7, @nweek) – DAYOFWEEK(@month)) < (DATEDIFF(LAST_DAY(@month), @month) + 1) % 7, 1, 0)

이렇게 해서 결과를 얻을 수 있다.

카테고리:Programming 태그:, ,
  1. 댓글이 없습니다.
  1. No trackbacks yet.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: